IoC 容器負責管理容器中所有 bean 的生命周期, 而在 bean 生命周期的不同階段, Spring 提供了不同的擴展點來改變 bean 的命運. 在容器的啟動階段, BeanFactoryPostProcessor
允許我們在容器實例化相應對象之前, 對注冊到容器的 BeanDefinition
所保存的信息做一些額外的操作, 比如修改 bean 定義的某些屬性或者增加其他信息等.
BeanPostProcessor 接口
如果希望在Spring容器完成實例化、配置和初始化bean之后實現某些自定義邏輯, 則可以實現一個或多個 BeanPostProcessor
接口.
public interface BeanPostProcessor { @Nullable default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { return bean; } @Nullable default Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { return bean; }}
在 Bean 實例化之后會先執行 postProcessBeforeInitialization
方法, 再執行 Bean 的初始化方法, 然后在執行 postProcessAfterInitialization
方法.
Ordered 接口 @Order 注解
此接口只有一個方法 int getOrder();
用來設置執行順序.
如果實現多個 BeanPostProcessor
接口, 我們就可以實現 Ordered
接口來設置執行順序.
@Componentpublic class Test implements BeanPostProcessor, Ordered { @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { return bean; } @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { return bean; } @Override public int getOrder() { return 1; }}
也可以使用 @Order
注解進行排序
@Configuration@Order(2)public class Demo1Config { @Bean public Demo1Service demo1Service(){ System.out.println("demo1config 加載了"); return new Demo1Service(); }}
BeanFactoryPostProcessor 接口
在容器實例化相應對象之前, 對注冊到容器的 BeanDefinition
所保存的信息做一些額外的操作可以實現此接口.
區別
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。
新聞熱點
疑難解答
圖片精選