• Spring细粒度控制扫描Bean


    Spring 依赖注入(DI)的注解

    <context:component-scan 
            base-package="" 
       resource-pattern="**/*.class"
            name-generator="org.springframework.context.annotation.AnnotationBeanNameGenerator"
            use-default-filters="true"
       annotation-config="true">
           <context:include-filter type="aspectj" expression=""/>
           <context:exclude-filter type="regex" expression=""/>
    </context:component-scan>   
    • base-package表示扫描注解类的开始位置,即将在指定的包中扫描,其他包中的注解类将不被扫描,默认将扫描所有类路径;
    • resource-pattern表示扫描注解类的后缀匹配模式,即“base-package+resource-pattern”将组成匹配模式用于匹配类路径中的组件,默认后缀为“**/*.class”,即指定包下的所有以.class结尾的类文件;
    • name-generator:默认情况下的Bean标识符生成策略,默认是AnnotationBeanNameGenerator,其将生成以小写开头的类名(不包括包名);可以自定义自己的标识符生成策略;
    • use-default-filters:默认为true,表示过滤@Component、@ManagedBean、@Named注解的类,如果改为false默认将不过滤这些默认的注解来定义Bean,即这些注解类不能被过滤到,即不能通过这些注解进行Bean定义;
    • annotation-config表示是否自动支持注解实现Bean依赖注入,默认支持,如果设置为false,将关闭支持注解的依赖注入,需要通过<context:annotation-config/>开启。

        默认情况下将自动过滤@Component、@ManagedBean、@Named注解的类并将其注册为Spring管理Bean,可以通过在<context:component-scan>标签中指定自定义过滤器将过滤到匹配条件的类注册为Spring管理Bean,具体定义方式如下:

    <context:include-filter type="aspectj" expression=""/>
    <context:exclude-filter type="regex" expression=""/>
    • <context:include-filter>表示过滤到的类将被注册为Spring管理Bean;
    • <context:exclude-filter>表示过滤到的类将不被注册为Spring管理Bean,它比<context:include-filter>具有更高优先级;
    • type表示过滤器类型,目前支持注解类型、类类型、正则表达式、aspectj表达式过滤器,当然也可以自定义自己的过滤器,实现org.springframework.core.type.filter.TypeFilter即可;
    • expression表示过滤器表达式。

    一般情况下没必要进行自定义过滤,如果需要请参考如下示例:

    1、cn.javass.spring.chapter12.TestBean14自动注册为Spring管理Bean:

    <context:include-filter type="assignable" expression="cn.javass.spring.chapter12.TestBean14"/>

    2、把所有注解为org.aspectj.lang.annotation.Aspect自动注册为Spring管理Bean:

    <context:include-filter type="annotation" expression="org.aspectj.lang.annotation.Aspect"/>

    3、将把匹配到正则表达式“cn.javass.spring.chapter12.TestBean2*”排除,不注册为Spring管理Bean:

    <context:exclude-filter type="regex" expression="cn.javass.spring.chapter12.TestBean2*"/>

    4、将把匹配到aspectj表达式“cn.javass.spring.chapter12.TestBean3*”排除,不注册为Spring管理Bean:

    <context:exclude-filter type="aspectj" expression="cn.javass.spring.chapter12.TestBean3*"/>

    声明:本篇内容完全出自张开涛的Spring教程

  • 相关阅读:
    算法第三章上机实践报告
    算法第3章作业
    算法第二章上机实验报告
    对二分法的理解和关于结对编程的看法
    轮播图终极版
    C语言II博客作业04
    C语言II博客作业03
    C语言II博客作业02
    C语言II博客作业01
    作业01
  • 原文地址:https://www.cnblogs.com/larryzeal/p/5530377.html
Copyright © 2020-2023  润新知