91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

spring的父子容器及配置詳解

發布時間:2020-08-26 03:19:08 來源:腳本之家 閱讀:181 作者:張一一 欄目:編程語言

spring父子容器

spring總的上下文容器有父子之分,父容器和子容器。 ** 父容器對子容器可見,子容器對父容器不可見 **

對于傳統的spring mvc來說,spring mvc容器為子容器,也就是說ServletDispatcher對應的容器為子容器,而web.xml中通過ConextLoaderListener的contextConfigLocation屬性配置的為父容器。

父子容器的使用場景

父子容器的主要用途是上下文隔離。考慮以下一種場景。

  1. project-service.jar為服務層模塊。包含一些數據庫service方法。其對應的spring配置文件為project-service.xml。
  2. project-api為api服務器代碼。它依賴于project-service.jar。其對應的配置文件為project-api.xml。

project-api需要對project-service里的某些方法進行decorate,進行裝飾,比如給CustomerService進行裝飾。裝飾后的類為CachedCustomerService。于是,現在project-api里面包含兩個CustomerService,一個是來自project-service的CustomerService,另一個是CachedCustomerService。這個時候,如果project-api工程所有的配置文件都通過一個上下文進行加載,勢必出現問題(通常的做法是用import標簽全部給import進來)。因為,project里的PayService里通過@Resource標準注入了CustomerService,類似如下

@Serivce
public class PayService{
@Resource
private CustomerService cusService;
}

解決方式

這時,由于上下文在注入customerService屬性的時候,遇到了兩個CustomService。它無法判讀注入哪個Service。

當然了,有人會說,改一下PayService的Resource屬性,指定下具體注入哪個。但是,project-service.jar是第三方庫的話,改動代碼變得不可行,除非拿到源碼。

這個時候,就可以通過父子容器的方式解決這個問題。

將project-service放在父容器中,project-api所有的bean用子容器加載。

假設project-api的上下文配置文件為project-api.xml,實現方法如下。

1、定義project-total.xml

 <bean id = "serviceContext" class="org.springframework.context.support.ClassPathXmlApplicationContext">
  <constructor-arg>
  <value>
   classpath:project-service.xml
  </value>
  </constructor-arg>
 </bean>

 <bean id = "apiContext" class="org.springframework.context.support.ClassPathXmlApplicationContext">
  <constructor-arg>
   <value>
    classpath:project-api.xml
   </value>
  </constructor-arg>

  <constructor-arg>
   <ref bean="serviceContext"/>
  </constructor-arg>
 </bean>

2、在web.xml的上下文配置中如下。

 <context-param> 
  <param-name>contextConfigLocation</param-name>
  <param-value> classpath*:project-total.xml</param-value> 
 </context-param>

 <listener> 
  <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 
  </listener>

 <listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>

serviceContext為父容器,apiContext為子容器,從而實現serviceContext看不到apiContext,而apiContext可以看見serviceContext的效果。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

青铜峡市| 收藏| 砀山县| 贡嘎县| 综艺| 弋阳县| 五河县| 营口市| 平泉县| 怀化市| 烟台市| 德令哈市| 甘谷县| 诸城市| 邯郸市| 浦县| 军事| 景德镇市| 昂仁县| 普兰店市| 鄱阳县| 岳池县| 大城县| 东阿县| 弥勒县| 吉隆县| 米易县| 安岳县| 来凤县| 平邑县| 阿拉善盟| 清水河县| 同仁县| 宜君县| 南漳县| 乾安县| 马边| 鱼台县| 乐安县| 大埔区| 曲靖市|