Spring Bean生命周期:
1. 实例化Bean
启动tomcat容器时启动spring容器,或是当请求一个尚未初始化的bean时,或初始化bean的时候需要注入另一个尚未初始化的依赖时,容器就会调用createBean进行实例化,对于ApplicationContext容器,当容器启动结束后,通过获取BeanDefinition对象中的信息,实例化所有的Bean。
2. 依赖注入
不同bean的依赖相互注入
3. 处理Aware接口
Spring会检查实例对象是否实现了XXAware接口,并将相关的XXAware实例注入到bean.
如果这个bean已经实现了ApplicationContextAware 接口,spring容器就会调用我们的bean的setApplicationContext(ApplicationContext)方法,传入Spring上下文,把容器自己传给这个bean。
4. BeanPostProcessor
如果想在bean 实例好之前,想对bean进行一些自定义的处理,此时可以让bean实现 BeanPostProcessor 接口,并调用 postProcessBeforeInitialization 方法;实例好之后,还可以调用postProcessAfterInitialization方法,进行初始化以后的处理,一般应用于内存或缓存技术。
5. InitializingBean 与 init-method
如果bean在spring配置文件配置了 init-method 属性,则将自动调用其配置进行初始化
6. DisposableBean
当Bean不在需要时,会经过清理阶段,如果bean实现了 DisposableBean 这个接口,会调用其实现的destroy()方法。
7. destroy-method
如果进行了配置,会自动调用其配置的销毁方法。
核心技术流程图如下:
还有一篇文章写的也非常好:https://www.jianshu.com/p/1dec08d290c1