- 前期准备
● Bean 容器找到配置文件中 Spring Bean 的定义。 - 创建Bean的实例,进行初始化,注入属性
● Bean 容器利用 java反射API 创建一个 Bean 的实例。 - 属性填充
● 如果涉及到一些属性值 利用 set()方法设置一些属性值。
● 如果 Bean 实现了 BeanNameAware 接口,调用 setBeanName()方法,传入 Bean 的名字。
● 如果 Bean 实现了 BeanClassLoaderAware 接口,调用 setBeanClassLoader()方法,传入 ClassLoader对象的实例。
● 如果 Bean 实现了 BeanFactoryAware 接口,调用 setBeanFactory()方法,传入 BeanFactory对象的实例。
● 与上面的类似,如果实现了其他 *.Aware接口,就调用相应的方法。 - 初始化
初始化前:
● 如果有和加载这个 Bean 的 Spring 容器相关的 BeanPostProcessor 对象,执行postProcessBeforeInitialization() 方法
这里的BeanPostProcessor 针对所有Spring上下文中所有的bean,里面有postProcessBeforeInitialization和postProcessAfterInitialization。 postProcessBeforeInitialization方法在bean初始化之前执行, postProcessAfterInitialization方法在bean初始化之后执行。
初始化:
● 如果 Bean 实现了InitializingBean接口,执行afterPropertiesSet()方法。
afterPropertiesSet()可以针对某个具体的bean进行配置
● 如果 Bean 在配置文件中的定义包含 init-method 属性,执行指定的方法。
初始化后:
● 如果有和加载这个 Bean 的 Spring 容器相关的 BeanPostProcessor 对象,执行postProcessAfterInitialization() 方法
此时,bean已经准备就绪,可以被应用程序使用了,它们将一直驻留在应用上下文中,直到该应用上下文被销毁;
- 销毁Bean
● 当要销毁 Bean 的时候,如果 Bean 实现了 DisposableBean 接口,执行 destroy() 方法。
● 当要销毁 Bean 的时候,如果 Bean 在配置文件中的定义包含 destroy-method 属性,执行指定的方法。
评论区