一直对springbean的初始化一知半解,研究了一下发现其实很简单。
创建bean对象 – 属性赋值 – 初始化方法调用前的操作 – 初始化方法 – 初始化方法调用后的操作 – …— 销毁前操作 – 销毁方法的调用。
测试
bean类
public class Person implements InitializingBean,DisposableBean {private String name;private Integer age=1;public Person(String name, Integer age) {this.name = name;this.age = age;System.out.println("Person(String name, Integer age) constructor"+this);}public Person() {super();System.out.println("Person() constructor"+age);}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}// 自定义init方法public void init(){System.out.println("-----Person.init()-----"+this);}// 自定义销毁方法public void cleanUp(){System.out.println("-----Person.cleanUp()-----"+this);}// InitializingBean的实现方法@Overridepublic void afterPropertiesSet() throws Exception {System.out.println("-----InitializingBean.afterPropertiesSet()-----"+this);}//DisposableBean 的实现方法@Overridepublic void destroy() throws Exception {System.out.println("-----DisposableBean.destroy()-----"+this);}//对象创建并赋值之后调用@PostConstructpublic void init2(){System.out.println("-----@PostConstruct-----"+this);}//容器移除对象之前@PreDestroypublic void destory2(){System.out.println("-----@PreDestroy-----"+this);}}
配置类:
@Scope("singleton")@Bean(name="person",initMethod="init",destroyMethod="cleanUp",autowire= Autowire.BY_NAME)public Person person01(){return new Person("lisi", 20);}
结果:
// 创建并初始化Person(String name, Integer age) constructorPerson{name='lisi', age=20}-----@PostConstruct-----Person{name='lisi', age=20}-----InitializingBean.afterPropertiesSet()-----Person{name='lisi', age=20}-----Person.init()-----Person{name='lisi', age=20}//容器将要销毁-----@PreDestroy-----Person{name='lisi', age=20}-----DisposableBean.destroy()-----Person{name='lisi', age=20}-----Person.cleanUp()-----Person{name='lisi', age=20}
