应用启动初始化操作的各个方式及区别总结
一、 bean的生命周期
首先我们要明白IOC里面bean的生命周期:
- bean的实例化
- 执行@PostConstruct注解方法
- 注入对象属性
- 处理ApplicationContextAware接口,即setApplicationContext(ApplicationContext)方法。
- 扫描所有BeanPostProcessor接口。传入当前对象执行定义的所有postProcessBeforeInitialization(Object bean, String beanName)方法。
- 处理InitializingBean接口的 afterPropertiesSet()方法。
- 处理IOC配置文件当前bean配置的init-method方法(很少用)。
- 扫描所有的BeanPostProcessor接口。传入当前对象执行定义的所有postProcessAfterInitialization(Object bean, String beanName)方法。
- bean的使用。
- 当bean销毁时,一般是例如Spring上下文初始化失败时,或在Spring容器关闭时(正常关闭kill -15,而不是kill -9),会处理DisposableBean接口的destroy方法以及@PreDestroy注解的方法,其中@PreDestroy注解的方法较DisposableBean接口的destroy方法先执行。
二、给应用添加初始化操作的方式
常用的给应用添加初始化操作的方式,按执行顺序排列的话:
- 实现ApplicationContextAware接口。
- 实现InitializingBean接口。
- 实现ApplicationListener<ContextRefreshedEvent>接口,注册容器刷新后的监听器。
- 实现接口ApplicationRunne接口r。
注:其中1和2的区别是1会注入容器对象,他们可以通过@DependOn注解标识依赖的beanName,控制bean之间的初始化顺序。3和4的区别是4是整个应用启动完成后执行,3是在启动过程中并且所有bean初始化完成。
以上是 应用启动初始化操作的各个方式及区别总结 的全部内容, 来源链接: utcz.com/z/513599.html