何为生命周期 从对象创建到对象销毁的过程
bean的生命周期 2.1通过构造去创建bean实例 2.2为bean的属性设置值和对其他的bean的引用(调用set方法的过程) 2.3调用bean的初始化方法(需要在bean中自定义一个初始化方法) 2.4bean使用(此时bean对象已经获取到了) 2.5当容器关闭的时候,调用bean的销毁方法(需要在bean中配置销毁的方法)
下面演示一下bean的生命周期的具体过程: 首先编写一个类,用该类来进行bean生命周期的演示,创建过程(包括定义属性有参构造,set方法,初始化方法,和销毁的方法)
public class LifeCycle { public LifeCycle(){ System.out.println("bean对象实例化出来了"); } private String name; public void setName(String name) { System.out.println("set方法执行"); this.name = name; } /*自定义初始化方法,演示bean的生命周期*/ public void initial(){ System.out.println("初始化方法执行"); } /*自定义销毁方法,演示bean的生命周期*/ public void destr(){ System.out.println("销毁方法执行"); } @Override public String toString() { return "LifeCycle{" + "name='" + name + '\'' + '}'; } }在spring核心文件application-context.xml中进行该类对象的创建,并且注入属性。
<!--生命周期的演示,init-method属性用于定义LifeCycle中的初始化方法,destroy-method用于定义销毁的方法,在生命周期的具体阶段调用这两个方法--> <bean id="lifeCycle" class="com.lhh.spring1.LifeCycle" init-method="initial" destroy-method="destr"> <property name="name" value="刘少雄"></property> </bean>编写测试:
@Test public void testCycle() { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); //创建了该对象 LifeCycle life = context.getBean("lifeCycle", LifeCycle.class); //演示生命周期中的使用对象阶段 System.out.println("对象可以使用了"); System.out.println(life); //需要手动调用销毁方法,才会执行类中定义的销毁的方法。 context.close(); }运行结果:
!!!!!!!需要注意的是,如果加上spring中的后置处理器,那么bean对象的生命周期将由5步变为7步,其中需要加上的两个方法分别是bean对象初始化之前的方法和bean对象初始化之后的方法
关于如何加上这两个方法,步骤是:
自定义一个类,实现BeanPostProcessor接口,该接口有两个抽象方法,覆写这两个方法 public class MyBeanPost implements BeanPostProcessor { @Override public Object postProcessBeforeInitialization(Object o, String s) throws BeansException { System.out.println("初始化方法之前执行"); return o; } @Override public Object postProcessAfterInitialization(Object o, String s) throws BeansException { System.out.println("初始化方法之后执行"); return o; } }2.在核心配置文件当中,配置后置处理器,也可以理解为创建该对象,只不过该对象一创建,spring发现它实现了BeanPost接口,那么就把它当做可以用于作用其他bean对象生命周期中的两个阶段的方法
<bean id="myBeanPost" class="com.lhh.spring1.MyBeanPost"></bean>加上了后置处理器之后的bean对象的生命周期运行截图: 最后总结: 如果没有配置后置处理器,那么bean的生命周期只有五步,如果配置了后置处理器,那么就有七步。并且需要注意到的是一旦配置了后置处理器,那么spring会为每一个bean对象都配置后置处理器,因而每一个bean对象创建之后,都会执行自定义后置处理器中的两个方法的内容(现阶段是打印一句话,也许可以用于进行更为复杂的操作。)