运行于SpringBoot web环境,所以默认加载的是AnnotationConfigServletWebServerApplicationContext。WebApplicationContext启动则会扫描所有类,并创建所有Bean(延迟加载除外)。
一般通过在Bean构造方法执行前后,Bean属性设置之后,Bean init方法执行前后,Bean destroy方法执行之后来干涉Bean的行为。
1.实现了BeanFactoryPostProcessor接口的类,会在加载完配置文件后,扫描完所有Class后进行调用
2.继承InstantiationAwareBeanPostProcessorAdapter类,在创建每一个Bean时都会执行,干涉Bean构造方法执行前后的逻辑
3.实现了BeanPostProcessor接口的类,在创建每一个Bean时都会执行,干涉Bean的init方法执行前后的逻辑
4.具体Bean实现BeanFactoryAware, BeanNameAware, InitializingBean, DisposableBean这些接口,干涉Bean属性设置之后,init方法执行之后,以及destroy方法执行之后(一般不会用,对于Bean的侵入性太高,更多通过自定义的init和destroy方法来替代)
5.运行结果
扫描包完成调用(若多次扫描包则会多次调用) 加载spring自身的Bean也会触发生命周期 自定义Bean生命周期 关闭容器
网友评论