在传统的java应用中,Bean的生命周期是 当使用 new 关键字进行 实例化对象后,Bean就创建完成,当Bean不再被引用时,JAVA Gc进行可达性分析后,进行垃圾回收Bean销毁。
相比之下Spring 容器中的Bean的生命周期就显的复杂很多,如下图:
Spring Bean注入的过程:
1:Spring 对Bean进行实例化
2:Spring将值和Bean的引用注入到Bean对应的属性中
3:如果Bean实现了BeanNameAware接口,Spring 将Bean的Id 传递给setBean-Name方法;
4:如果Bean实现了BeanFactoryAware接口,Spring 将调用setBeanFactory方法,将BeanFactory容器实例传入
5:如果Bean实现了ApplicationContextAware接口,Spring将调用setApplicationContext()方法,将Bean所在的应用上下文的引用传过来
6:如果Bean实现了BeanPostProcessor接口,Spring将调用他们的Post-ProcessorBeforeInitializtion方法()
7:如果Bean实现了 InitializingBean接口,Spring将调用它们的after-PropertiesSet()方法,类似的如果Bean使用init-method声明了初始化方法,该方法也会被调用。
8:如果Bean实现了BeanPostProcessor接口,Spring将调用它们的Post-ProcessorAfterInitialization()方法
9:此时Bean已经准备就绪,可以被应用程序使用了,它们将一直驻留再应用上下文中,知道被应用上下文销毁。
10:如果Bean实现了DisposableBean接口,Spring将调用它的destroy()接口方法,同样如果Bean使用destroy-method生命了销毁方法,该方法也会被调用。