原因是在web.xml中配置了spring的dispatherServlet又配置了spring容器的listener但是只配置了一个参数

  1. <context-param>  

  2.         <param-name>contextConfigLocation</param-name>  

  3.         <param-value>  

  4.             classpath:spring-*.xml  

  5.         </param-value>  

  6.     </context-param>  

结果就是两部分都会去加载spring的配置文件,所以在配置文件中配置的bean都会被加载两边,一次是初始化spring容器,一次是springmvc,正确的做法是将两部分分离开来,controller层以及之前的部分由springmvc来加载,service层以及往后的dao等部分有spring容器来管理,即面向接口的部分由spring容器来加载,其他部分有springmvc来加载;

配置如下:

  1. <servlet>  

  2.         <servlet-name>spring-mvc</servlet-name>  

  3.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  

  4.         <!--查找controller位置的xml文件配置 -->  

  5.         <init-param>  

  6.             <param-name>contextConfigLocation</param-name>  

  7.             <!--查找这里可以配置多个,用逗号分割或者用通配符*也就是第二行 -->  

  8.             <param-value>/WEB-INF/classes/spring-mvc.xml</param-value>  

  9.         </init-param>  

  10.         <load-on-startup>1</load-on-startup>  

  11.         <async-supported>true</async-supported>  

  12.     </servlet>  

  13.     <context-param>  

  14.         <param-name>contextConfigLocation</param-name>  

  15.         <param-value>  

  16.             classpath:application-*.xml  

  17.         </param-value>  

  18.     </context-param>