我们传统的Bean对象中,使用该对象是会通过New关键字产生,一旦不再使用了后Bean对象就会被JVM自动回收。但是Spring bean的生命周期就比较复杂,熟练掌握Spring bean的生命周期有利于扩展自己的业务逻辑。下面是摘自与Spring Action中的一张Spring bean生命周期图:
入上述图可以看出,Spring bean从初始化到最终销毁会经历很多个步骤:
1.spring对bean进行初始化。
2.bean的属性和参数进行注入。
3.如果bean实现了BeanNameAware接口,将会调用该接口的setBaenName()方法。
4.如果该bean实现了BeanFactoryAware接口,将会调用该接口的setBaenFactory()方法。
5.如果该bean实现了ApplicationContextAware接口,将会调用该bean的setApplictionContext()方法。
6.如果bean实现了BeanPostProcessor接口,将会调用postProcessBeforeInitialization()方法进行预初始化。
7.如果bean实现了InitializingBean接口,name接口中的afterPropertiesSet()将会被调用。
8.调用初始化init-mentod方法。
9.如果bean实现了BeanPostProcessor接口,将会调用postProcessAfterInitialization()方法。
此时Spring bean创建完成了,可以直接使用Spring bean了,Spring bean会常驻与Spring上下文中,知道Spring 上下文被销毁后Spring bean才会被销毁,默认Spring bean是单例,所以上述初始化方法仅会调用一次,反之则不是,如果商户方法中有任何一个方法失败Spring bean创建将会失败。
10.如果Spring bean实现了DisposableBean接口,Spring销毁时将会调用destroy()方法,同理如果自定义了init-destroy()也会执行。