use-default-filters是component-scan标签的一个属性,默认为true,指扫描“comtroller、repository、component、service”所有的注解类,如果为false,指关闭这个默认行为,需要手动指定扫描的注解,所以一般use-default-filters=false与include-filter配合使用。
实例说明:
先看一下SpringMVC 和 Spring 的配置文件中对包扫描的配置:
SpringMVC:
<!-- 配置自动扫描的包 -->
<context:component-scan base-package="com.mybatis.ssm" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
Spring:
<!-- 配置自动扫描的包 -->
<context:component-scan base-package="com.mybatis.ssm">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
SpringMVC配置中,我们只需要扫描负责转发的控制器,所以关闭默认扫描,只扫描controller。这就是为什么use-default-filters=false与include-filter要配合使用了,因为关闭默认扫描后,就什么都不扫描了。
而spring上下文是需要扫描除控制器外的所有的bean(service,repository,component),所以use-default-filters=true,然后去掉controller的扫描(exclude-filter)。use-default-filters默认值为true,可以不写。