我开始这样子配置项目
springmvc配置扫描:
<context:component-scan base-package="com" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
spring配置扫描:
<context:component-scan base-package="com" use-default-filters="false">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
上面这样子写,自己是这样子理解的:springmvc扫描的话,就只扫描controller, spring扫描的话,就只不扫描controller,其他都扫描。
但是结果是 在controller里面,使用@Autowired 注入service的时候,报错。
分析:
其实自己思路是对的,就该springmvc扫描的话,就只扫描controller, spring扫描的话,就只不扫描controller,其他都扫描。
只是自己上面的配置错了。
应该:
springmvc:
<context:component-scan base-package="com" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
spring:
<context:component-scan base-package="com" use-default-filters="true"> <!-- 这里use-default-filters也可以不写-->
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
分析:
use-default-filters 意思是扫描该配置包以及子包..下面的所有类型的注解,包括但不限于 Controller、Service、Component...
springmvc只扫描Controller,不扫描其他的,那么就需要把use-default-filters设置为false,都不扫描。 然后加上include-filter表示只扫描Controller.
spring的话,不把use-default-filters设置为false,让他默认,也就是全部扫描,但是我们又不要Controller,所以再加上exclude-filter,排除掉Controller就可以了哈。