原因是在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>