使用@ComponentScan自动扫描组件并指定扫描规则

导读:本篇文章讲解 使用@ComponentScan自动扫描组件并指定扫描规则,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

使用@ComponentScan自动扫描组件并指定扫描规则

@Repository、@Service、@Controller、@Component注解的类都会被扫描到,并自动注入到Spring容器中。

此时,我们分别创建BookDao、BookService以及BookController这三个类,并在这三个类中分别添加@Repository、@Service、@Controller注解,如下所示。

BookDao

// 名字默认是类名首字母小写 
@Repository public class BookDao { }

Book Service

@Service public class BookService { }

Book Controller

@Controller public class BookController { }

测试:

我们就可以在IOCTest测试类中编写如下一个方法来进行测试了,即看一看IOC容器中现在有哪些bean。

public class IOCTest {

    @Test
    public void test(){
        ApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class);

        String[] definitionNames = context.getBeanDefinitionNames();
        for (String name : definitionNames) {
            System.out.println(name);
        }
        
    }
}

在这里插入图片描述

使用注解配置包扫描

使用@ComponentScan注解来配置包扫描了。使用@ComponentScan注解配置包扫描非常非常easy!只须在我们的MainConfig类上添加@ComponentScan注解,并将扫描的包指定为com.baidu即可,如下所示。
在这里插入图片描述

@Configuration  //告诉Spring这是一个配置类,相当于Bean.xml
@ComponentScan(value = "com.baidu", excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,classes = Controller.class)}) //就会扫描这个包下的所有注解;
public class MyConfig {

    @Bean("person01") //相当于我们的bean
    public Person person(){
        return  new Person("lisi",20);
    }
}

在这里插入图片描述

查看@ComponentScan 源码分析;

在这里插入图片描述

小结:

@Filter(type = FilterType.ANNOTATION,),这是通过注解;

public enum FilterType {
    ANNOTATION,
    ASSIGNABLE_TYPE,
    ASPECTJ,
    REGEX,
    CUSTOM;

    private FilterType() {
    }
}

对于Filter的过滤方法,我们有很多的方法去实现;

我们可以使用@ComponentScan注解来指定Spring扫描哪些包,可以使用
excludeFilters()方法来指定扫描时排除哪些组件,也可以使用
includeFilters()方法来指定扫描时只包含哪些组件。
当使用includeFilters()方法指定只包含哪些组件时,需要禁用掉默认的过滤规则。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/71825.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!