歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Spring攔截器執行了兩次

Spring攔截器執行了兩次

日期:2017/3/1 10:15:02   编辑:Linux編程

今天在調試代碼的時候,發現有個攔截器被執行了兩次,很是奇怪,開始以為是即配置了注解的方式,同時又配置了xml配置文件造成的問題,可是仔細檢查後並沒有配置注解,只配置了xml文件。

還是采用老辦法,在log4j.properties文件中加入如下一句話,打開Spring的日志級別為Info(如果還是看不到有用的調試信息,則把日志級別調整為DEBUG)

log4j.category.org.springframework=INFO, A1, A2

重新啟動應用,可以看到後台輸出很多以下的信息

INFO - Overriding bean definition for bean 'IScheduleService':xxx

INFO - Overriding bean definition for bean 'IScheduleService':xxx

……

把輸入信息拷貝到editplus中,搜索執行了兩次的beanId,可以看到該配置文件被“Overriding”了好幾次,讀下日志出的源代碼,大致可以看到該bean已經被加載,後面的xml中又出現了同樣Id的bean,確認應用的配置文件中只有一份這樣BeanId的xml文件,所以大膽的猜測是不是同樣的xmlbean被加載了兩次呢?

找到加載xml的入口代碼,我們是采用“ClassPathXmlApplicationContext”來加載配置文件的,其中的通配符如下:

publicstatic String[] XMLFILES = new String[] {

"classpath*:trsconfig/**/*beans.xml", "classpath*:**/*beans.xml",

"/trsconfig/domain/com.trs.enable.aop/enabledAopAnnotation.xml"

紅色部分的通配符會出現加載同樣xml的問題,注視掉前面部分的通配符,重新啟動應用,攔截器只會執行一次了。

Copyright © Linux教程網 All Rights Reserved