Spring的扩展点(简约)
2022-02-21 15:46:14 17 举报
spring的扩展点
作者其他创作
大纲/内容
SpringBoot的内置事件
ApplicationReadyEvent
如果实现了BeanNameAware接口,则调用SetBeanName方法。。等等
BeanFactoryPostProcessor
Aware
应用
1、假如这个方法返回对象了,则不走后面的流程,直接走他父类的PostProcessAfterInitialization方法2、假如返回null,继续流程例子:开启Aop后启用判断Bean这个类需不需要增强(切面类比如加了@Advice @Pointcut注解的类,不需要被增强)不需要增强则放入一个map中(用于AOP增强的时候跳过此类),返回null,继续下面的流程。
发布事件
AutowiredAnnotationBeanPostProcessor对bean中的属性或者方法进行扫描,扫描的是@Autowired和@Value注解,把这些对象封装成InjectionMetadata对象,属性描述对象可以对属性进行反射读和写操作。后续IOC,依赖注入,对bean进行依赖注入时就可以根据InjectionMetadata对象里面封装的内容进行属性赋值了
SpringBoot开始启动时便会发布ApplicationStartingEvent事件标志标志SpringApplication开始启动
ApplicationContextInitializedEvent事件在ApplicationContext容器创建后,且为ApplicationContext容器设置了environment变量和执行了ApplicationContextInitializers的初始化方法后但在bean定义加载前触发,标志ApplicationContext已经初始化完毕。
postProcessorPropertyValues
BeanDefinition
ApplicationStartedEvent
postProcessorBeforeInstantiation
Spring的ConfigurationClassPostProcessor也是用来将解析注解@Configuration中的方法来解析Bean进行注册
InstantiationAwareBeanPostProcessor
BeanDefinitionRegistryPostProcessor
SmartInstantiationAwareBeanPostProcessor
初始化后用于创建AOP代理
用于解决循环引用,此处可以获取早期对象
postProcessorAfterInitialization
ApplicationStartingEvent
Boolean
postProcessMergedBeanDefinition
PropertyValues
ApplicationContextInitializedEvent
属性赋值 Populate
在目标对象实例化之后调用,如果该方法返回false那么postProcessPropertyValues就会被忽略不执行;如果返回true,postProcessPropertyValues就会被执行。返回false时可以阻断属性赋值阶段
BeanNameAware、BeanFactoryAwareApplicationContextAware
Object
当SpringApplication已经开始启动且环境变量Environment已经创建后,并且为环境变量Environment配置了命令行和Servlet等类型的环境变量后,此时会发布ApplicationEnvironmentPreparedEvent事件。
MergedBeanDefinitionPostProcessor
ApplicationEnvironmentPreparedEvent
ContextRefreshedEvent
Mybatis中MapperScannerConfigurer就实现了该方法,扫描接口,没有实现类的情况下找到接口方法与sql之间的联系从而生成BeanDefinition并注册。
注入属性。@AutoWired在这里DI
Constructor
销毁
2
实例化 Instantiation
ApplicationPreparedEvent事件在ApplicationContext容器已经完全准备好时但在容器刷新前触发,在这个阶段bean定义已经加载完毕还有environment已经准备好可以用了。
可以修改在BeanDefinitionRegistry接口实现类中注册的任意BeanDefinition,也可以增加和删除BeanDefinition
postProcessBeanFactory
getEarlyBeanReference
postProcessBeanDefinitionRegistry
BeanPostProcessor
postProcessorAfterInstantiation
ApplicationPreparedEvent
BeanFactory扩展
determineCandidateConstructors
初始化前调用@PostContruct在Init()方法执行前
PropertyPlaceholderConfigurer,BeanDefinition生成后,可能某些参数是${key},这个实现类就是把前边这种参数转换成xxx.properties中key所对应的值。
用于指定实例化的构造函数
ApplicationReadyEvent事件在调用完ApplicationRunner和CommandLineRunner的run方法后触发,此时标志SpringApplication已经正在运行。
postProcessorBeforeInitialization
1
初始化 Initialization
所有的bean定义都被加载,但是没有bean会被实例化时,允许重写或添加属性。
收藏
0 条评论
下一页