先看我的web.xml配置如下(片段):
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:/applicationContext.xml,classpath*:/config/**/spring-*.xml,classpath*:/config/api/*.xml</param-value>
</context-param>
......
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:/springmvc-servlet.xml,classpath*:/config/**/springmvc-*.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
错误:
1. <context-param>参数配置classpath*:/applicationContext.xml,classpath*:/config/**/spring-*.xml,classpath*:/config/api/*.xml导致Service中的某个Bean初始化两次,classpath*:/config/**/spring-*.xml初始化一次,classpath*:/config/api/*.xml初始化一次,会出现同一个类的两个实例,从而导致org.springframework.beans.factory.NoUniqueBeanDefinitionException异常!
2. DispatcherServlet下的<init-param>参数,是SpringMVC的容器初始化配置参数,即Spring的子容器初始化。把Service层中需要的Bean配置在这里,会出现找不到Bean的异常org.springframework.beans.factory.NoSuchBeanDefinitionException,因为Spring根上下文(父容器)无法找到要在SpringMVC上下文(子容器)还未初始化的Bean,父级上下文初始化错误!
Am I clear? If not , @ me, thanks!
P.S.
第一个异常处理过程中,在没有发现错误的时候,使用@Qualifier注解避开异常(无奈之解):
//@Qualifier("com.xx.xx.FullClassName")
参考:
1. web.xml配置-参考:https://blog.csdn.net/u010796790/article/details/52098258 (recommended)
2. springmvc上下文初始化过程-参考:https://blog.csdn.net/and1kaney/article/details/51214149 (recommended)
3. 关于Spring InitialzationBean遇到的坑及分析思考-参考:https://juejin.im/post/5b3a31776fb9a024e62b8c77 (recommended)
4. http://bijian1013.iteye.com/blog/2384411
5. https://blog.csdn.net/u012817635/article/details/79361839
6. https://www.jianshu.com/p/4386dffc998f
7. http://blog.51cto.com/tl2011/1831615
8. https://blog.csdn.net/ray1205/article/details/78047675
9. https://blog.csdn.net/u012811805/article/details/54347823