一、生命周期流程
流程图 流程图2Spring Bean 的初始化流程如下:
1.实例化 Bean 对象
Spring 容器根据配置中的 Bean Definition(定义)中实例化 Bean 对象。
Bean Definition 可以通过 XML,Java 注解或 Java Config 代码提供。
Spring 使用依赖注入填充所有属性,如 Bean 中所定义的配置。
2.Aware 相关的属性,注入到 Bean 对象
如果 Bean 实现 BeanNameAware 接口,则工厂通过传递 Bean 的 beanName 来调用 #setBeanName(String name) 方法。
3.如果 Bean 实现 BeanFactoryAware 接口,工厂通过传递自身的实例来调用 #setBeanFactory(BeanFactory beanFactory) 方法。
4.调用相应的方法,进一步初始化 Bean 对象
-
如果存在与 Bean 关联的任何 BeanPostProcessor 们,则调用 #preProcessBeforeInitialization(Object bean, String beanName) 方法。
-
如果 Bean 实现 InitializingBean 接口,则会调用 #afterPropertiesSet() 方法。
-
如果为 Bean 指定了 init 方法(例如 <bean /> 的 init-method 属性),那么将调用该方法。
-
如果存在与 Bean 关联的任何 BeanPostProcessor 们,则将调用 #postProcessAfterInitialization(Object bean, String beanName) 方法。
Spring Bean 的销毁流程如下:
1.如果 Bean 实现 DisposableBean 接口,当 spring 容器关闭时,会调用 #destroy() 方法。
2.如果为 bean 指定了 destroy 方法(例如 <bean /> 的 destroy-method 属性),那么将调用该方法。
网友评论