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

使用@ComponentScan自动扫描组件并指定扫描规则,第1张

使用@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()方法指定只包含哪些组件时,需要禁用掉默认的过滤规则。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/869267.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存