Spring细粒度控制扫描Bean

Posted LarryZeal

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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教程

以上是关于Spring细粒度控制扫描Bean的主要内容,如果未能解决你的问题,请参考以下文章

粗粒度与细粒度权限控制

粗粒度与细粒度权限控制

十二 K8S细粒度权限控制

自定义标签 + shiro 实现权限细粒度控制

如何将 DynamoDB 细粒度访问控制与 Cognito 用户池结合使用?

对 DynamoDb 使用细粒度访问控制时出现 AccessDeniedException