最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

spring的父子容器及配置詳解

 更新時(shí)間:2018年01月05日 09:34:16   作者:張一一  
本篇文章主要介紹了spring的父子容器及配置詳解,詳細(xì)的介紹了spring父子容器的概念、使用場(chǎng)景和用法,有興趣的可以了解一下

spring父子容器

spring總的上下文容器有父子之分,父容器和子容器。 ** 父容器對(duì)子容器可見(jiàn),子容器對(duì)父容器不可見(jiàn) ** 。

對(duì)于傳統(tǒng)的spring mvc來(lái)說(shuō),spring mvc容器為子容器,也就是說(shuō)ServletDispatcher對(duì)應(yīng)的容器為子容器,而web.xml中通過(guò)ConextLoaderListener的contextConfigLocation屬性配置的為父容器。

父子容器的使用場(chǎng)景

父子容器的主要用途是上下文隔離??紤]以下一種場(chǎng)景。

  1. project-service.jar為服務(wù)層模塊。包含一些數(shù)據(jù)庫(kù)service方法。其對(duì)應(yīng)的spring配置文件為project-service.xml。
  2. project-api為api服務(wù)器代碼。它依賴于project-service.jar。其對(duì)應(yīng)的配置文件為project-api.xml。

project-api需要對(duì)project-service里的某些方法進(jìn)行decorate,進(jìn)行裝飾,比如給CustomerService進(jìn)行裝飾。裝飾后的類為CachedCustomerService。于是,現(xiàn)在project-api里面包含兩個(gè)CustomerService,一個(gè)是來(lái)自project-service的CustomerService,另一個(gè)是CachedCustomerService。這個(gè)時(shí)候,如果project-api工程所有的配置文件都通過(guò)一個(gè)上下文進(jìn)行加載,勢(shì)必出現(xiàn)問(wèn)題(通常的做法是用import標(biāo)簽全部給import進(jìn)來(lái))。因?yàn)?,project里的PayService里通過(guò)@Resource標(biāo)準(zhǔn)注入了CustomerService,類似如下

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

解決方式

這時(shí),由于上下文在注入customerService屬性的時(shí)候,遇到了兩個(gè)CustomService。它無(wú)法判讀注入哪個(gè)Service。

當(dāng)然了,有人會(huì)說(shuō),改一下PayService的Resource屬性,指定下具體注入哪個(gè)。但是,project-service.jar是第三方庫(kù)的話,改動(dòng)代碼變得不可行,除非拿到源碼。

這個(gè)時(shí)候,就可以通過(guò)父子容器的方式解決這個(gè)問(wèn)題。

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

假設(shè)project-api的上下文配置文件為project-api.xml,實(shí)現(xiàn)方法如下。

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為子容器,從而實(shí)現(xiàn)serviceContext看不到apiContext,而apiContext可以看見(jiàn)serviceContext的效果。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • idea鼠標(biāo)控制放大縮小的操作

    idea鼠標(biāo)控制放大縮小的操作

    這篇文章主要介紹了idea鼠標(biāo)控制放大縮小的操作教程,具有很好的參考價(jià)值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • java在集合遍歷過(guò)程中刪除元素5種方法對(duì)比、案例、常見(jiàn)的錯(cuò)誤及其后果

    java在集合遍歷過(guò)程中刪除元素5種方法對(duì)比、案例、常見(jiàn)的錯(cuò)誤及其后果

    這篇文章主要介紹了java在集合遍歷過(guò)程中刪除元素5種方法對(duì)比、案例、常見(jiàn)的錯(cuò)誤及其后果的相關(guān)資料,介紹了五種不同的解決方案,包括使用Iterator.remove()、for-each+手動(dòng)刪除、for循環(huán)反向遍歷、List.removeIf()和使用Stream.filter(),需要的朋友可以參考下
    2024-12-12
  • MyBatis分頁(yè)插件PageHelper的使用與原理

    MyBatis分頁(yè)插件PageHelper的使用與原理

    提到插件相信大家都知道,插件的存在主要是用來(lái)改變或者增強(qiáng)原有的功能,MyBatis中也一樣,下面這篇文章主要給大家介紹了關(guān)于Mybatis第三方PageHelper分頁(yè)插件的使用與原理,需要的朋友可以參考下
    2023-02-02
  • Java Volatile關(guān)鍵字同步機(jī)制詳解

    Java Volatile關(guān)鍵字同步機(jī)制詳解

    這篇文章主要介紹了Java Volatile關(guān)鍵字同步機(jī)制詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • SpringCloud OpenFeign自定義結(jié)果解碼器方式

    SpringCloud OpenFeign自定義結(jié)果解碼器方式

    這篇文章主要介紹了SpringCloud OpenFeign自定義結(jié)果解碼器方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • mybatis test標(biāo)簽如何判斷值是否相等

    mybatis test標(biāo)簽如何判斷值是否相等

    這篇文章主要介紹了mybatis test標(biāo)簽判斷值是否相等的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • SpringBoot事件發(fā)布與監(jiān)聽(tīng)超詳細(xì)講解

    SpringBoot事件發(fā)布與監(jiān)聽(tīng)超詳細(xì)講解

    今天去官網(wǎng)查看spring boot資料時(shí),在特性中看見(jiàn)了系統(tǒng)的事件及監(jiān)聽(tīng)章節(jié),所以下面這篇文章主要給大家介紹了關(guān)于SpringBoot事件發(fā)布和監(jiān)聽(tīng)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • 詳談java中int和Integer的區(qū)別及自動(dòng)裝箱和自動(dòng)拆箱

    詳談java中int和Integer的區(qū)別及自動(dòng)裝箱和自動(dòng)拆箱

    這篇文章主要介紹了詳談java中int和Integer的區(qū)別及自動(dòng)裝箱和自動(dòng)拆箱,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Spring核心容器之BeanDefinition解析

    Spring核心容器之BeanDefinition解析

    這篇文章主要介紹了Spring核心容器之BeanDefinition解析,Spring 將管理的對(duì)象稱之為 Bean,容器會(huì)先實(shí)例化 Bean,然后自動(dòng)注入,實(shí)例化的過(guò)程就需要依賴 BeanDefinition,需要的朋友可以參考下
    2023-11-11
  • Java中的按值傳遞和按引用傳遞的代碼詳解

    Java中的按值傳遞和按引用傳遞的代碼詳解

    本文通過(guò)實(shí)例代碼給大家介紹了Java中的按值傳遞和按引用傳遞的相關(guān)知識(shí),感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-06-06

最新評(píng)論

神池县| 泾阳县| 隆安县| 保亭| 日照市| 芦山县| 毕节市| 阿勒泰市| 缙云县| 徐水县| 镇坪县| 洞头县| 岳普湖县| 武冈市| 巴东县| 叙永县| 馆陶县| 南通市| 丹江口市| 永德县| 长白| 乳山市| 巴塘县| 阜新市| 时尚| 祁阳县| 健康| 鸡泽县| 浪卡子县| 榆中县| 正定县| 甘谷县| 定南县| 澄迈县| 永泰县| 怀化市| 宁陕县| 方山县| 扎兰屯市| 静宁县| 桂林市|