spring bean 作用域:
大致分为四个阶段:实例化 —> 属性赋值 —> 初始化 —> 销毁。
- 创建 Bean 的实例 :Bean 容器首先会找到配置文件中的 Bean 定义,然后使用 Java 反射来创建 Bean 的实例。
- Bean 属性赋值/填充 :为 Bean 设置相关属性和依赖,例如
@Autowired等注解注入的对象、@Value注入的值、setter方法或构造函数注入依赖和值、@Resource注入的各种资源。- Bean 初始化 :
- 检查 Aware 相关接口, 如果实现了某个 aware 接口就调用相应的方法。 比如实现了
BeanFactoryAware接口,就调用setBeanFactory()方法,传入BeanFactory对象的实例。BeanPostProcessor前置处理,执行postProcessBeforeInitialization()方法- 如果 Bean 实现了
InitializingBean接口,执行afterPropertiesSet()方法。- 如果 Bean 在配置文件中的定义包含
init-method属性,执行指定的方法。BeanPostProcessor后置处理,执行postProcessAfterInitialization()方法。- 销毁 Bean :销毁并不是立马把 Bean 给销毁掉,而是把 Bean 的销毁方法先记录下来,将来需要销毁 Bean 或者销毁容器的时候,就调用这些方法去释放 Bean 所持有的资源。
- 如果 Bean 实现了
DisposableBean接口,执行destroy()方法。- 如果 Bean 在配置文件中的定义包含
destroy-method属性,执行指定的 Bean 销毁方法。或者,也可以直接通过@PreDestroy注解标记 Bean 销毁之前执行的方法。
doCreateBean
|
|
initializeBean
|
|
