springmvc配置类下注解@ComponentScans详解

1.示例代码

@Configuration  //告诉Spring这是一个配置类
@ComponentScans(
        value = {
                @ComponentScan(value = "com.atguigu", includeFilters = {
                        @Filter(type = FilterType.CUSTOM, classes = {MyTypeFilter.class})
                }, useDefaultFilters = false)
        }
)
public class MainConfig {
    //给容器中注册一个Bean;类型为返回值的类型,Bean的id默认是用方法名作为id
    @Bean("person")
    public Person person01() {
        return new Person("lisi", 14);
    }

}

2.解析
@ComponentScans样本

@ComponentScan(value = "com.atguigu",
        excludeFilters = {
                @Filter(type = FilterType.ANNOTATION, classes = {Controller.class, Service.class})
        },
        includeFilters = {
                @Filter(type = FilterType.ANNOTATION, classes = {Controller.class, Service.class})
        },
        useDefaultFilters = false
)

规律:

测试发现:

  • 1.如果只有value = “com.atguigu”,那么会扫描com.atguigu下所有的 带有@Component、@Controller、@Service、@Repository的bean
  • 2.如果只有value = “com.atguigu”,useDefaultFilters = false,那么除了这个配置类(mainConfig)及这个配置类内部配置的bean(用@Bean修饰的方法),com.atguigu下其他的带有@Component、@Controller、@Service、@Repository注解的bean都不会被扫描进来
  • 3.如果存在value、excludeFilters、includeFilters三个属性,会在第1种情况下,先增加includeFilters包含的bean,然后减去excludeFilters属性包含的bean
  • 4.如果存在value、excludeFilters、includeFilters、useDefaultFilters = false四个属性,会在第2种情况下,先增加includeFilters包含的bean,然后减去excludeFilters包含的bean

总结:

  • 1.当useDefaultFilters=true(默认也是true)扫描vlue下的所有Bean(@Component、@Controller、@Service、@Repository)
  • 2.当useDefaultFilters=false时,除了当前配置类及其内部的@Bean,其Bean都不扫描
  • 3.当添加includeFilters或者excludeFilters属性,则情况1或情况2(看当useDefaultFilters属性决定)基础上,先增加includeFilters指定的bean,然后去除excludeFilters指定的bean
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

强强爱java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值