欢迎访问『www.cnblogs.com/blog-ice』

/**
* 01-ApplicationContextInitializer
* 可以想到的场景可能为,在最开始激活一些配置,或者利用这时候class还没被类加载器加载的时机,进行动态字节码注入等操作
*
* 在启动类中用springApplication.addInitializers(new TestApplicationContextInitializer())语句加入
* 配置文件配置context.initializer.classes=com.example.demo.TestApplicationContextInitializer
* Spring SPI扩展,在spring.factories中加入org.springframework.context.ApplicationContextInitializer=com.example.demo.TestApplicationContextInitializer
*
* 02-BeanDefinitionRegistryPostProcessor
* 你可以在这里动态注册自己的beanDefinition,可以加载classpath之外的bean
ConfigurationClassPostProcessor   扫描,自动装配

*

* 03-BeanFactoryPostProcessor
* 在这个时机,用户可以通过实现这个扩展接口来自行处理一些东西,比如修改已经注册的beanDefinition的元信息
PropertySourcesPlaceholderConfigurer  替换${}

*
* 04-InstantiationAwareBeanPostProcessor
* [ɪnˌstænʃiˈeɪʃən]
* 该接口继承了BeanPostProcess接口,区别如下:
* BeanPostProcess接口只在bean的初始化阶段进行扩展(注入spring上下文前后),而InstantiationAwareBeanPostProcessor接口在此基础上增加了3个方法,把可扩展的范围增加了实例化阶段和属性注入阶段。
* 该类主要的扩展点有以下5个方法,主要在bean生命周期的两大阶段:实例化阶段和初始化阶段,下面一起进行说明,按调用顺序为:
* postProcessBeforeInstantiation:实例化bean之前,相当于new这个bean之前
* postProcessAfterInstantiation:实例化bean之后,相当于new这个bean之后
* postProcessPropertyValues:bean已经实例化完成,在属性注入时阶段触发,@Autowired,@Resource等注解原理基于此方法实现
* postProcessBeforeInitialization:初始化bean之前,相当于把bean注入spring上下文之前
* postProcessAfterInitialization:初始化bean之后,相当于把bean注入spring上下文之后
* 这个扩展点非常有用 ,无论是写中间件和业务中,都能利用这个特性。比如对实现了某一类接口的bean在各个生命期间进行收集,或者对某个类型的bean进行统一的设值等等。
*

* 05-SmartInstantiationAwareBeanPostProcessor

* 推断构造器,推断Bean类型,获取早期Bean引用

*
* 06-BeanFactoryAware
* --你可以在bean实例化之后,但还未初始化之前,拿到 BeanFactory,在这个时候,可以对每个bean作特殊化的定制。也或者可以把BeanFactory拿到进行缓存,日后使用
* 07-ApplicationContextAwareProcessor
* --EnvironmentAware
* --EmbeddedValueResolverAware
* --ResourceLoaderAware
* --ApplicationEventPublisherAware
* --MessageSourceAware
* --ApplicationContextAware
* 08-BeanNameAware
* --用户可以扩展这个点,在初始化bean之前拿到spring容器中注册的的beanName,来自行修改这个beanName的值
* 09-PostConstruct
* --用户可以对某一方法进行标注,来进行初始化某一个属性
* 10-InitializingBean
* --用户实现此接口,来进行系统启动的时候一些业务指标的初始化工作
* 11-FactoryBean
* 用户可以扩展这个类,来为要实例化的bean作一个代理,比如为该对象的所有的方法作一个拦截,在调用前后输出一行log,模仿ProxyFactoryBean的功能
* 12-SmartInitializingSingleton
* [ɪˌnɪʃələˈzeɪʃn]
* 户可以扩展此接口在对所有单例对象初始化完毕后,做一些后置的业务处理
* 13-CommandLineRunner
* 用户扩展此接口,进行启动项目之后一些业务的预处理
* 14-DisposableBean
* 这个扩展点也只有一个方法:destroy(),其触发时机为当此对象销毁时,会自动执行这个方法。比如说运行applicationContext.registerShutdownHook时,就会触发这个方法
* 15-ApplicationListener
* --ContextRefreshedEvent
* --ContextStartedEvent
* --ContextStoppedEvent
* --RequestHandledEvent

...
*
* 16-SpringApplicationRunListener
* --starting
* --environmentPrepared
* --contextPrepared
* --contextLoaded
* --started
* --running
* --failed
*
*
*
*/

posted on 2021-09-15 11:18  仙路尽头谁为峰  阅读(373)  评论(0编辑  收藏  举报
这里是自由发挥的天堂