摘要:父子容器總的上下文容器有父子之分。父容器和子容器。使用場景父子容器的主要用途之一便是是上下文隔離。假設的上下文配置文件為,實現方法如下。說明,其中,為父容器,為子容器。
本文由作者張遠道授權網易云社區發布。
spring父子容器
spring總的上下文容器有父子之分。父容器和子容器。父容器對子容器可見,子容器對父容器不可見。
對于傳統的spring mvc來說,spring mvc容器為子容器,也就是說ServletDispatcher對應的容器為子容器,而web.xml中通過ConextLoaderListener的contextConfigLocation屬性配置的為父容器。
使用場景
父子容器的主要用途之一便是是上下文隔離。考慮以下一種場景。
project-service.jar為服務層模塊。包含一些數據庫service方法。起對應的spring配置文件為project-service.xml。 project-api為api服務器代碼。它依賴于project-service.jar。 但是,project-api需要對project-service里的某些方法進行decorate,進行裝飾,比如給CustomerService進行裝飾。裝飾后的類為CachedCustomerService。于是,現在project-api里面包含兩個CustomerService,一個是來自project-service的CustomerService,另一個是CachedCustomerService。這個時候,如果project-api工程所有的配置文件都通過一個上下文進行加載,勢必出現問題。因為,project里的PayService里通過@Resource標準注入了CustomerService,類似如下
@Serivcepublic class PayService{@Resourceprivate CustomerService cusService;
}
這時,由于上下文在注入customerService屬性的時候,遇到了兩個CustomService。它無法判讀注入哪個Service。 當然了,有人會說,改一下PayService的Resource屬性,指定下具體注入哪個。但是,project-service.jar是第三方庫的話,改動代碼變得不可行,除非拿到源碼。
配置父子容器
這個時候,就可以通過父子容器的方式解決這個問題。 將project-service放在父容器中,project-api所有的bean用子容器加載。
假設project-api的上下文配置文件為project-api.xml,實現方法如下。
1、定義project-total.xml
classpath:project-service.xml classpath:project-api.xml
2、在web.xml的上下文配置中如下。
contextConfigLocation classpath*:project-total.xml org.springframework.web.util.Log4jConfigListener org.springframework.web.context.ContextLoaderListener
說明,其中,serviceContext為父容器,apiContext為子容器。在apiContext掃描路徑里的任務bean都對serviceContext不可見。從而達到隔離的目的
參考列表
http://springtips.blogspot.co...
http://docs.spring.io/autorep...
更多網易技術、產品、運營經驗分享請訪問網易云社區。
文章來源: 網易云社區
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/25331.html
摘要:目前建議使用與。入參是當前正在處理的,是當前的配置名,返回的對象為處理后的。如果,則將放入容器的緩存池中,并返回。和這兩個接口,一般稱它們的實現類為后處理器。體系結構讓容器擁有了發布應用上下文事件的功能,包括容器啟動事件關閉事件等。 點擊進入我的博客 1 如何理解IoC 1.1 依然是KFC的案例 interface Burger { int getPrice(); } in...
摘要:現在給定一個項目的包結構在中有以下配置只掃描注解可以看出要把最后的包寫上,不能包含子包,所以不能寫成。 大家好,我是豬弟,豬在我心中從來不是蠢的代名詞,而是懶的代名詞,本次準備記錄一個在開發測試過程中遇到的問題,跟蹤了三天spring和第三方RPC組件的源碼,最終發現了問題是因為第三方組件沒有處理好而父子容器導致的,還有一個因素是spring注解掃描重疊。 Spring版本:4.3...
摘要:在這一步里,將配置文件的信息裝入到容器的定義注冊表中,但此時還未初始化。注冊后處理器根據反射機制從中找出所有類型的,并將它們注冊到容器后處理器的注冊表中。是屬性編輯器的注冊表,主要作用就是注冊和保存屬性編輯器。 點擊進入我的博客 1 Spring容器整體流程 1.1 ApplicationContext內部原理 AbstractApplicationContext是Applicati...
摘要:事件事件監聽器,對監聽到的事件進行處理。擁有一個成員變量,提供了容器監聽器的注冊表。注冊事件監聽器根據反射機制,使用的方法,從中找出所有實現的,將它們注冊為容器的事件監聽器,實際的操作就是將其添加到事件廣播器所提供的監聽器注冊表中。 1. Spring的資源抽象接口 假如有一個文件位于Web應用的類路徑下,用戶可以通過以下方式對這個文件資源進行訪問: 通過FileSystemReso...
摘要:服務雪崩效應是一種因服務提供者的不可用導致服務消費者的不可用并將不可用逐漸放大的過程。這種代理能夠記錄最近調用發生錯誤的次數,然后決定使用允許操作繼續,或者立即返回錯誤。這個自己持有的上下文默認實現類也是。 ?????本篇集成Hystrix,繼續搭建demo。 雪崩效應:在微服務架構中通常會有多個服務層調用,基礎服務的故障可能會導致級聯故障,進而造成整個系統不可用的情況,這種現象被稱為...
閱讀 1295·2021-11-23 09:51
閱讀 3399·2021-09-06 15:00
閱讀 987·2021-08-16 10:57
閱讀 1371·2019-08-30 12:46
閱讀 933·2019-08-29 12:22
閱讀 1604·2019-08-29 11:07
閱讀 3148·2019-08-26 11:23
閱讀 2980·2019-08-23 15:14