摘要:容器負(fù)責(zé)管理容器中所有的生命周期而在生命周期的不同階段提供了不同的擴(kuò)展點(diǎn)來改變的命運(yùn)在容器的啟動(dòng)階段允許我們?cè)谌萜鲗?shí)例化相應(yīng)對(duì)象之前對(duì)注冊(cè)到容器的所保存的信息做一些額外的操作比如修改定義的某些屬性或者增加其他信息等接口如果希望在容器完成實(shí)例
IoC 容器負(fù)責(zé)管理容器中所有 bean 的生命周期, 而在 bean 生命周期的不同階段, Spring 提供了不同的擴(kuò)展點(diǎn)來改變 bean 的命運(yùn). 在容器的啟動(dòng)階段, BeanFactoryPostProcessor 允許我們?cè)谌萜鲗?shí)例化相應(yīng)對(duì)象之前, 對(duì)注冊(cè)到容器的 BeanDefinition 所保存的信息做一些額外的操作, 比如修改 bean 定義的某些屬性或者增加其他信息等.
BeanPostProcessor 接口如果希望在Spring容器完成實(shí)例化、配置和初始化bean之后實(shí)現(xiàn)某些自定義邏輯, 則可以實(shí)現(xiàn)一個(gè)或多個(gè) 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 實(shí)例化之后會(huì)先執(zhí)行 postProcessBeforeInitialization 方法, 再執(zhí)行 Bean 的初始化方法, 然后在執(zhí)行 postProcessAfterInitialization 方法.
Ordered 接口 @Order 注解此接口只有一個(gè)方法 int getOrder(); 用來設(shè)置執(zhí)行順序.
如果實(shí)現(xiàn)多個(gè) BeanPostProcessor 接口, 我們就可以實(shí)現(xiàn) Ordered 接口來設(shè)置執(zhí)行順序.
@Component public 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 注解進(jìn)行排序
@Configuration @Order(2) public class Demo1Config { @Bean public Demo1Service demo1Service(){ System.out.println("demo1config 加載了"); return new Demo1Service(); } }BeanFactoryPostProcessor 接口
在容器實(shí)例化相應(yīng)對(duì)象之前, 對(duì)注冊(cè)到容器的 BeanDefinition 所保存的信息做一些額外的操作可以實(shí)現(xiàn)此接口.
區(qū)別BeanFactoryPostProcessor 會(huì)處理一些元數(shù)據(jù).
BeanPostProcessor 會(huì)處理實(shí)例化后的對(duì)象.
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/72478.html
摘要:在中配置,以配置為例整個(gè),最先使用的地方從里面讀取這個(gè)配置使用接口的中獲取具體的實(shí)現(xiàn)類中有兩個(gè)值當(dāng)主線程被外部終止時(shí),會(huì)觸發(fā),執(zhí)行的與方法通知下面的鎖操作,主線程正常走完代碼,并最終停止。 spring是如何啟動(dòng)容器的 常見的一種在本地使用main方法啟動(dòng)spring的方法 public static void main(String[] args) throws Except...
摘要:什么是類那什么樣類的才是擴(kuò)展機(jī)制中的類呢類是一個(gè)有復(fù)制構(gòu)造函數(shù)的類,也是典型的裝飾者模式。代碼如下有一個(gè)參數(shù)是的復(fù)制構(gòu)造函數(shù)有一個(gè)構(gòu)造函數(shù),參數(shù)是擴(kuò)展點(diǎn),所以它是一個(gè)擴(kuò)展機(jī)制中的類。 摘要:?在Dubbo可擴(kuò)展機(jī)制實(shí)戰(zhàn)中,我們了解了Dubbo擴(kuò)展機(jī)制的一些概念,初探了Dubbo中LoadBalance的實(shí)現(xiàn),并自己實(shí)現(xiàn)了一個(gè)LoadBalance。是不是覺得Dubbo的擴(kuò)展機(jī)制很不錯(cuò)呀...
摘要:今天我想聊聊的另一個(gè)很棒的特性就是它的可擴(kuò)展性。的擴(kuò)展機(jī)制在的官網(wǎng)上,描述自己是一個(gè)高性能的框架。接下來的章節(jié)中我們會(huì)慢慢揭開擴(kuò)展機(jī)制的神秘面紗。擴(kuò)展擴(kuò)展點(diǎn)的實(shí)現(xiàn)類。的定義在配置文件中可以看到文件中定義了個(gè)的擴(kuò)展實(shí)現(xiàn)。 摘要: 在Dubbo的官網(wǎng)上,Dubbo描述自己是一個(gè)高性能的RPC框架。今天我想聊聊Dubbo的另一個(gè)很棒的特性, 就是它的可擴(kuò)展性。 Dubbo的擴(kuò)展機(jī)制 在Dub...
摘要:文章目錄的核心注解的執(zhí)行流程的擴(kuò)展點(diǎn)的核心注解內(nèi)含個(gè)子注解該注解用于中,被該注解標(biāo)注的表示,該類是個(gè)配置類。通知完畢調(diào)用的。 文章目錄1、@SpringBootApplication -- SpringBoot的核心注解2、SpringApplication的執(zhí)行流程3、SpringApplication的擴(kuò)展點(diǎn) 1、@SpringBootApplication -- SpringBo...
摘要:目前建議使用與。入?yún)⑹钱?dāng)前正在處理的,是當(dāng)前的配置名,返回的對(duì)象為處理后的。如果,則將放入容器的緩存池中,并返回。和這兩個(gè)接口,一般稱它們的實(shí)現(xiàn)類為后處理器。體系結(jié)構(gòu)讓容器擁有了發(fā)布應(yīng)用上下文事件的功能,包括容器啟動(dòng)事件關(guān)閉事件等。 點(diǎn)擊進(jìn)入我的博客 1 如何理解IoC 1.1 依然是KFC的案例 interface Burger { int getPrice(); } in...
閱讀 2209·2021-11-22 15:29
閱讀 4098·2021-11-04 16:13
閱讀 991·2019-08-29 16:58
閱讀 339·2019-08-29 16:08
閱讀 1457·2019-08-23 17:56
閱讀 2378·2019-08-23 17:06
閱讀 3166·2019-08-23 16:55
閱讀 2058·2019-08-23 16:22