Spring-Bean初始化顺序
来源:互联网 发布:php argv 1 编辑:程序博客网 时间:2024/06/03 16:51
在验证spring-Bean初始化顺序前,先看几个关键接口
InitializingBean
Spirng的InitializingBean为bean提供了定义初始化方法的方式。InitializingBean是一个接口,它仅仅包含一个方法:afterPropertiesSet()。
在spring 初始化后,执行完所有属性设置方法(即setXxx)将自动调用 afterPropertiesSet(), 在配置文件中无须特别的配置,但此方式增加了bean对spring 的依赖,应该尽量避免使用
init-method(非接口)
Spring虽然可以通过InitializingBean完成一个bean初始化后对这个bean的回调,但是这种方式要求bean实现 InitializingBean接口。一但bean实现了InitializingBean接口,那么这个bean的代码就和Spring耦合到一起了。通常情况下我不鼓励bean直接实现InitializingBean,可以使用Spring提供的init-method的功能来执行一个bean 子定义的初始化方法。
BeanFactoryPostProcessor接口
可以在spring的bean创建之前,修改bean的定义属性。也就是说,Spring允许BeanFactoryPostProcessor在容器实例化任何其它bean之前读取配置元数据,并可以根据需要进行修改,例如可以把bean的scope从singleton改为prototype,也可以把property的值给修改掉。可以同时配置多个BeanFactoryPostProcessor,并通过设置'order'属性来控制各个BeanFactoryPostProcessor的执行次序。
注意:BeanFactoryPostProcessor是在spring容器加载了bean的定义文件之后,在bean实例化之前执行的。接口方法的入参是ConfigurrableListableBeanFactory,使用该参数,可以获取到相关bean的定义信息
BeanPostProcessor接口
BeanPostProcessor,可以在spring容器实例化bean之后,在执行bean的初始化方法前后,添加一些自己的处理逻辑。这里说的初始化方法,指的是下面两种:
1)bean实现了InitializingBean接口,对应的方法为afterPropertiesSet
2)在bean定义的时候,通过init-method设置的方法
注意:BeanPostProcessor是在spring容器加载了bean的定义文件并且实例化bean之后执行的。BeanPostProcessor的执行顺序是在BeanFactoryPostProcessor之后。
初始化bean顺序
1.构造函数
2.初始化属性
3.如果实现了BeanFactoryAware 接口执行setBeanFactory方法
4..如果实现了InitializingBean 接口执行afterPropertiesSet方法
5.如果在配置文件中指定了init-method,那么执行该方法
6..如果实现了BeanFactoryPostProcessor 接口在 “new”其他类之前执行 postProcessBeanFactory 方法(通过这个方法可以改变配置文件里面的属性值的配置)
7.如果实现了BeanPostProcessor 接口,那么会在其他bean初始化方法之前执行postProcessBeforeInitialization 方法,之后执行postProcessAfterInitialization方法
感觉奇怪的地方就是没有执行destroy方法
在此方法中没有执行接口BeanPostProcessor的方法,不知道何原因
- Spring-Bean初始化顺序
- Spring-Bean初始化顺序
- Spring中Bean的初始化顺序
- 关于spring加载applicationContext初始化bean顺序的问题
- Spring面试题之如何控制Bean初始化顺序
- Spring Bean 初始化过程
- Spring - 初始化bean
- Spring Bean 初始化过程
- Spring Bean 初始化过程
- spring bean 初始化
- spring手动初始化bean
- spring初始化bean InitializingBean
- Spring Bean 初始化过程
- Spring Bean 初始化过程
- spring bean初始化
- Spring Bean初始化过程
- spring bean初始化时机
- Spring Bean初始化过程
- interrupt、interrupted和isInterrupted的区别
- 自编STM32轻量级操作系统(四)------信号量的实现
- xml约束之dtd约束和schema约束---3
- 自制Axure部件库(元件库)图文教程
- 用python 分析微信好友信息并生成词云
- Spring-Bean初始化顺序
- MySQL优化—之EXPLAIN
- python访问数据库(基于pymysql)
- Java 身份证工具类
- python异常处理
- Android 颜色透明度换算
- 一维数组
- 栈应用之简易计算器算法的原理及实现(C语言)
- 吃瘪#9