今天在调试代码的时候,发现有个拦截器被执行了两次,很是奇怪,开始以为是即配置了注解的方式,同时又配置了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的问题,注视掉前面部分的通配符,重新启动应用,拦截器只会执行一次了。