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