栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring全注解之@CompontScan注解的自动扫描组件和指定扫描规则(二)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring全注解之@CompontScan注解的自动扫描组件和指定扫描规则(二)

目录

自动扫描组件

之前的做法

现在的做法

 指定扫描规则

最后

@ComponentScan是一个可重复注解

 @ComponentScans注解的使用


 

自动扫描组件 之前的做法

之前我们如果在我们自定义的类上加上了@Controller、@Service、@Repository、@Component注解,然后再配置文件中加入以下配置就可以自动扫描到容器中

  
现在的做法

之前我们既然已经使用@Configuration注解来替代了配置文件那么,那么上述配置我们同样可以使用一个注解@ComponentScan来解决。

@Configuration
@ComponentScan(basePackages = {"com.zhujie"})
public class MainConfig {

    @Bean("use")
    public User getUser(){
        return new User(1001,"张三");
    }
}

我们创建三个标记注解的类如下

 

 

测试有几个对象被容器创建

    @Test
    public void test2(){
        ApplicationContext ac = new AnnotationConfigApplicationContext(MainConfig.class);

        //获取容器中被创建的对象的name即传统方式时候bean标签中的id
        String[] beanDefinitionNames = ac.getBeanDefinitionNames();
        for(String name : beanDefinitionNames){
            System.out.println(name);
        }
    }

 

 指定扫描规则

上述使用@ComponentScan注解后,容器会扫描com.zhujie包及其子包下标注有@Controller、@Service、@Repository、@Component的类到容器中。那么,如果想排除一些包下的类不注册到容器中的话我们可以使用excludeFilters属性来指定

@Configuration
@ComponentScan(basePackages = {"com.zhujie"},excludeFilters = {
        @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = {Controller.class})
        })
//excludeFilters 是一个数组
public class MainConfig {

    @Bean("use")
    public User getUser(){
        return new User(1001,"张三");
    }
}

 我们在运行之前的测试类会发现userController组件已经不存在了

如果只是想包含某写组件的话我们可以使用 includeFilters,同时的需要将useDefaultFilters设置为false

@Configuration
@ComponentScan(basePackages = {"com.zhujie"},includeFilters = {
        @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = {Controller.class})
        },useDefaultFilters = false)
//excludeFilters 是一个数组
public class MainConfig {

    @Bean("use")
    public User getUser(){
        return new User(1001,"张三");
    }
}

 运行之前的测试代码,看到标记注解而类中只有controller组件被注册到容器

 

最后 @ComponentScan是一个可重复注解

 因此,我们在之前的配置类中可以写多个@ComponentScan注解。这里被扫描到容器的组件就只有controller和Service了

 运行测试类,看控制台效果

 @ComponentScans注解的使用

上面我们写了多个 @ComponentScan,当然我们可以使用@ComponentScans来表示多个@ComponentScan的效果

@Configuration
@ComponentScans({
        @ComponentScan(basePackages = {"com.zhujie"},includeFilters = {
                @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = {Controller.class})
        },useDefaultFilters = false),
        @ComponentScan(basePackages = {"com.zhujie"},includeFilters = {
                @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = {Service.class})
        },useDefaultFilters = false)
})
//excludeFilters 是一个数组
public class MainConfig {

    @Bean("use")
    public User getUser(){
        return new User(1001,"张三");
    }
}

 运行之前的测试类,效果是一样的

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/949396.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号