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

使用監(jiān)聽器對Spring bean id進(jìn)行唯一校驗過程解析

 更新時間:2019年08月21日 15:23:08   作者:chenzhou123520  
這篇文章主要介紹了使用監(jiān)聽器對Spring bean id進(jìn)行唯一校驗過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

背景

項目中用到了多數(shù)據(jù)源,不同的數(shù)據(jù)源根據(jù)業(yè)務(wù)不同配置在不同的工程中,由maven來統(tǒng)一聚合。但是前幾天在開發(fā)過程中突然發(fā)現(xiàn)項目前臺工程的事務(wù)配置不起作用了,在之前明明測試過事務(wù)功能,當(dāng)時是生效的。

然后檢查了一下配置文件中事務(wù)部分的配置,發(fā)現(xiàn)沒什么改動。為了排除其它因素的干擾,采用了單元測試重新測試了一次,結(jié)果發(fā)現(xiàn)當(dāng)前數(shù)據(jù)源事務(wù)正常。根據(jù)這個分析可能是當(dāng)前的事務(wù)配置被其它配置干擾了,仔細(xì)檢查了一下后發(fā)現(xiàn)罪魁禍?zhǔn)资橇硗獾囊粋€數(shù)據(jù)源事務(wù)配置(在另外的一個配置文件中)的bean id名稱和當(dāng)前的事務(wù)配置bean id重復(fù)了。

我們都知道,Spring會對同一份配置文件中的bean進(jìn)行校驗,也就是說在同一份配置文件中不允許出現(xiàn)相同的bean定義,會提示報錯。但是Spring IOC容器在加載時并不會顯示對不同配置文件中重復(fù)的bean id進(jìn)行報錯提示,當(dāng)遇到有重復(fù)的bean定義時,Spring采取的策略是把后面加載的配置覆蓋前面加載的配置,沒有任何警告和提示。

這樣很容易造成一個問題是當(dāng)我們團(tuán)隊進(jìn)行開發(fā)時可能會不小心覆蓋別人定義的bean,導(dǎo)致系統(tǒng)出現(xiàn)不可預(yù)知的錯誤和異常。

怎么解決這個問題呢?我們可以配置監(jiān)聽器,在Spring容器啟動時對重復(fù)的bean進(jìn)行校驗,如果有重復(fù)的bean,則報錯提示。

因為Spring IOC容器啟動加載時會檢查bean定義是否有重復(fù),如果有重復(fù)則會根據(jù)AbstractRefreshableApplicationContext類中的allowBeanDefinitionOverriding屬性值進(jìn)行判斷,如果值為true,則把后加載的bean覆蓋前面加載的bean定義,如果為false則拋出BeanDefinitionStoreException異常。

所以,解決這個問題的辦法就比較簡單了,只要將這個allowBeanDefinitionOverriding值在spring初始化的時候設(shè)置為false就行了。具體步驟如下:

1.自定義一個ContextLoader

/** 
 * ClassName:MyContextLoader <br/> 
 * Function: 自定義ContextLoader. <br/> 
 * Date:  2013-1-18 下午03:53:16 <br/> 
 * @author chenzhou 
 * @version 
 * @since JDK 1.6 
 */ 
public class MyContextLoader extends ContextLoader { 
 /** 
  * 設(shè)置allowBeanDefinitionOverriding屬性為false,spring ioc容器在加載bean的過程中會去判斷beanName 是否有重復(fù),. <br/> 
  * 如果發(fā)現(xiàn)重復(fù)的話再根據(jù)allowBeanDefinitionOverriding 這個成員變量,. <br/> 
  * 如果是false的話則拋出BeanDefinitionStoreException 這個異常,如果為true的話就會覆蓋這個bean的定義. <br/> 
  * @see org.springframework.web.context.ContextLoader#customizeContext(javax.servlet.ServletContext, 
  *  org.springframework.web.context.ConfigurableWebApplicationContext) 
  */ 
 @Override 
 protected void customizeContext(ServletContext servletContext, ConfigurableWebApplicationContext applicationContext){ 
  super.customizeContext(servletContext, applicationContext); 
  XmlWebApplicationContext context = (XmlWebApplicationContext) applicationContext; 
  //設(shè)置allowBeanDefinitionOverriding屬性為false 
  context.setAllowBeanDefinitionOverriding(false); 
 }  
} 

2.自定義一個ContextLoaderListener

/** 
 * ClassName:MyContextLoaderListener <br/> 
 * Function: 自定義ContextLoaderListener. <br/> 
 * Date:  2013-1-18 下午04:12:00 <br/> 
 * @author chenzhou 
 * @version 
 * @since JDK 1.6 
 */ 
public class MyContextLoaderListener extends ContextLoaderListener { 
 @Override 
 protected ContextLoader createContextLoader(){ 
  return new MyContextLoader(); 
 } 
} 

3.修改web.xml文件的監(jiān)聽器配置

<!-- 自定義的ContextLoaderListener --> 
<listener> 
 <listener-class>com.chenzhou.examples.erm.util.listener.MyContextLoaderListener</listener-class> 
</listener> 

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

相關(guān)文章

  • 教你如何用Java根據(jù)日期生成流水號

    教你如何用Java根據(jù)日期生成流水號

    這篇文章主要介紹了教你如何用Java根據(jù)日期生成流水號,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-04-04
  • Java中RedisUtils工具類的使用

    Java中RedisUtils工具類的使用

    本文主要介紹了Java中RedisUtils工具類的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • java通過PDF模板填寫PDF表單

    java通過PDF模板填寫PDF表單

    這篇文章主要為大家詳細(xì)介紹了java通過PDF模板填寫PDF表單,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • 你可能真沒用過這些 IDEA 插件(建議收藏)

    你可能真沒用過這些 IDEA 插件(建議收藏)

    IDEA 全稱 IntelliJ IDEA,是java編程語言開發(fā)的集成環(huán)境。IntelliJ在業(yè)界被公認(rèn)為最好的java開發(fā)工具。這篇文章主要介紹 IDEA 必用插件的安裝及用法,需要的朋友可以參考下
    2020-08-08
  • Mybatis操作數(shù)據(jù)時出現(xiàn):java.sql.SQLSyntaxErrorException:?Unknown?column?'XXX'?in?'field?list'的問題解決

    Mybatis操作數(shù)據(jù)時出現(xiàn):java.sql.SQLSyntaxErrorException:?Unknown?c

    這篇文章主要介紹了Mybatis操作數(shù)據(jù)時出現(xiàn):java.sql.SQLSyntaxErrorException:?Unknown?column?'XXX'?in?'field?list',需要的朋友可以參考下
    2023-04-04
  • JAVA 根據(jù)身份證計算年齡的實現(xiàn)代碼

    JAVA 根據(jù)身份證計算年齡的實現(xiàn)代碼

    這篇文章主要介紹了JAVA 根據(jù)身份證計算年齡的實例代碼及java根據(jù)出生日期獲得年齡的方法,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧
    2018-05-05
  • Java實現(xiàn)可配置換膚的方法示例

    Java實現(xiàn)可配置換膚的方法示例

    本文主要介紹了Java實現(xiàn)可配置換膚的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • java中的i++和++i的區(qū)別詳解

    java中的i++和++i的區(qū)別詳解

    這篇文章主要介紹了java中的i++和++i的區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • mybatis postgresql 批量刪除操作方法

    mybatis postgresql 批量刪除操作方法

    PostgreSQL是一種特性非常齊全的自由軟件的對象-關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(ORDBMS),這篇文章主要介紹了mybatis postgresql 批量刪除操作,需要的朋友可以參考下
    2020-02-02
  • Java守護(hù)線程實例詳解_動力節(jié)點Java學(xué)院整理

    Java守護(hù)線程實例詳解_動力節(jié)點Java學(xué)院整理

    在Java中有兩類線程:User Thread(用戶線程)、Daemon Thread(守護(hù)線程) 。下面通過本文給大家分享java守護(hù)線程實例詳解,需要的朋友參考下吧
    2017-06-06

最新評論

波密县| 广德县| 体育| 集安市| 文登市| 甘肃省| 永宁县| 达拉特旗| 项城市| 米林县| 康马县| 大连市| 新邵县| 蚌埠市| 河津市| 海宁市| 日照市| 黑山县| 彭阳县| 平原县| 外汇| 宝丰县| 伊川县| 安岳县| 洪泽县| 天门市| 璧山县| 张家界市| 汉阴县| 东安县| 将乐县| 鹤山市| 宽城| 鱼台县| 平邑县| 华蓥市| 泗阳县| 阜新| 新建县| 葫芦岛市| 墨江|