Spring容器扩展机制的实现原理
IoC容器负责管理容器中所有bean的生命周期,而在bean生命周期的不同阶段,Spring提供了不同的扩展点来改变bean的命运.在容器的启动阶段,BeanFactoryPostProcessor允许我们在容器实例化相应对象之前,对注册到容器的BeanDefinition所保存的信息做一些额外的操作,比如修改bean定义的某些属性或者增加其他信息等.
BeanPostProcessor接口
如果希望在Spring容器完成实例化、配置和初始化bean之后实现某些自定义逻辑,则可以实现一个或多个BeanPostProcessor接口.
publicinterfaceBeanPostProcessor{ @Nullable defaultObjectpostProcessBeforeInitialization(Objectbean,StringbeanName)throwsBeansException{ returnbean; } @Nullable defaultObjectpostProcessAfterInitialization(Objectbean,StringbeanName)throwsBeansException{ returnbean; } }
在Bean实例化之后会先执行postProcessBeforeInitialization方法,再执行Bean的初始化方法,然后在执行postProcessAfterInitialization方法.
Ordered接口@Order注解
此接口只有一个方法intgetOrder();用来设置执行顺序.
如果实现多个BeanPostProcessor接口,我们就可以实现Ordered接口来设置执行顺序.
@Component publicclassTestimplementsBeanPostProcessor,Ordered{ @Override publicObjectpostProcessBeforeInitialization(Objectbean,StringbeanName)throwsBeansException{ returnbean; } @Override publicObjectpostProcessAfterInitialization(Objectbean,StringbeanName)throwsBeansException{ returnbean; } @Override publicintgetOrder(){ return1; } }
也可以使用@Order注解进行排序
@Configuration @Order(2) publicclassDemo1Config{ @Bean publicDemo1Servicedemo1Service(){ System.out.println("demo1config加载了"); returnnewDemo1Service(); } }
BeanFactoryPostProcessor接口
在容器实例化相应对象之前,对注册到容器的BeanDefinition所保存的信息做一些额外的操作可以实现此接口.
区别
- BeanFactoryPostProcessor会处理一些元数据.
- BeanPostProcessor会处理实例化后的对象.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。