Spring5 – 学习笔记 - 3.IoC容器
1、bean的生命周期
第一:通过构造器创建bean实例对象(调用无参构造)。
第二:为bean的属性设置相应的值和对其他bean的引用(调用类属性的set方法)。
第三:把bean实例传递给bean后置处理器的方法postProcessBeforeInitialization。
第四:调用bean里的初始化方法(需要在xml配置文件中进行配置初始化方法)。
第五:把bean实例传递给bean后置处理器的方法postProcessAfterInitialization。
第六:bean创建的对象实例可以使用(对象实例获取到了)。
第七:当实例对象销毁时,调用bean的销毁方法(需要在xml配置文件中进行配置销毁方法)。
2、代码演示
实体类的代码。
//爱好类
public class Hobby {
private String hname;
public Hobby(){
System.out.println("hobby类的构造方法。。。。");
}
//创建实例对象前的初始化方法
public void initMethod(){
System.out.println("hobby类的initMethod方法。。。。");
}
//销毁实例对象前的销毁方法
public void destroyMethod(){
System.out.println("hobby类的destroyMethod方法。。。。");
}
public void setHname(String hname) {
System.out.println("hobby类hname属性的set方法。。。。");
this.hname = hname;
}
@Override
public String toString() {
return "Hobby{" +
"hname='" + hname + '\'' +
'}';
}
}
自己创建的后置处理器的代码。
//自己的后置处理器
public class MyBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("后置处理器的postProcessBeforeInitialization方法。。。。");
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("后置处理器的postProcessAfterInitialization方法。。。。");
return bean;
}
}
xml配置文件代码。
<!--
init-method属性值是bean的初始化方法,在创建对象实例时调用
destroy-method属性值是bean的销毁方法,在杀掉、销毁实例对象时调用
-->
<bean id="hobby1" class="com.tt.collectiontype.bean.Hobby" init-method="initMethod" destroy-method="destroyMethod">
<property name="hname" value="羽毛球"></property>
</bean>
<!--自己的后置处理器-->
<bean id="myBeanPostProcessor" class="com.tt.collectiontype.bean.MyBeanPostProcessor"></bean>
测试方法代码。
@Test
public void test1(){
ApplicationContext context=new ClassPathXmlApplicationContext("bean5.xml");
Hobby hobby1=context.getBean("hobby1", Hobby.class);
System.out.println("hobby类的实例对象创建完成。。。。");
System.out.println(hobby1);
((ClassPathXmlApplicationContext) context).close();
}
测试结果。
打印结果表示确实为之前的七步:
1、调用无参构造。
2、调用类属性的set方法和其他bean的引用。
3、后置处理器的方法postProcessBeforeInitialization。
4、初始化方法。
5、后置处理器的方法postProcessAfterInitialization。
6、获取到对象实例。
7、销毁方法。