1.常规配置
为了扩展和维护的方便,我们想要的效果是:
不在
applicationContext.xml
中扫描@Controller
,只在springmvc.xml
中扫描@Controller
。
所以常规配置如下:
applicationContext.xml:
<context:component-scan base-package="com.nigream">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
springmvc.xml:
<context:component-scan base-package="com.nigream.controller">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
另外还需要在web.xml文件中配置如下代码:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
2.有关springmvc.xml扫描配置
当使用如下配置时,不能起到只扫描 @Controller
的作用,会扫描到 com.nigream
下的所有注解。
<context:component-scan base-package="com.nigream">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
所以由此我们就可以得知可以在 springmvc.xml
中扫描所有的注解,那么,其实我们就可以不需要 applicationContext.xml
,当我们删除 applicationContext.xml
并删除 web.xml
中的相关配置,并重启项目时,仍然可以成功运行。
由此,我们可以反过来想想,那可不可以只在 applicationContext.xml
配置扫描呢?
答案是不可以,若在applicationContext.xml中配置如下内容时,发现运行项目调用controller中的方法时,会报如下错误。
<context:component-scan base-package="com.nigream">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
原因或如下所言:
为什么不在spring容器管理controller Spring容器与SpringMVC容器
所以,为了扩展和维护的方便,扫描配置还是参照 1.常规配置
。