原因是在web.xml中配置了spring的dispatherServlet又配置了spring容器的listener但是只配置了一个参数
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:spring-*.xml
</param-value>
</context-param>
结果就是两部分都会去加载spring的配置文件,所以在配置文件中配置的bean都会被加载两边,一次是初始化spring容器,一次是springmvc,正确的做法是将两部分分离开来,controller层以及之前的部分由springmvc来加载,service层以及往后的dao等部分有spring容器来管理,即面向接口的部分由spring容器来加载,其他部分有springmvc来加载;
配置如下:
<servlet>
<servlet-name>spring-mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--查找controller位置的xml文件配置 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<!--查找这里可以配置多个,用逗号分割或者用通配符*也就是第二行 -->
<param-value>/WEB-INF/classes/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<async-supported>true</async-supported>
</servlet>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:application-*.xml
</param-value>
</context-param>