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会处理实例化后的对象.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。