今天在調試代碼的時候,發現有個攔截器被執行了兩次,很是奇怪,開始以為是即配置了注解的方式,同時又配置了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的問題,注視掉前面部分的通配符,重新啟動應用,攔截器只會執行一次了。