注解扫描器 ‹context:component-scan›

Exisi 2022-11-28 07:34:01
Categories: Tags:

 

 

 

属性

描述

base-package

扫描的基本包路径,标识了<context:component-scan>元素所扫描的包,可以使用一些通配符进行配置

annotation-config

是否激活属性注入注解,<context:component-scan>元素也完成了<context:annotation-config>元素的工作,开关就是这个属性,false则关闭属性注入注解功能

name-generator

这个属性指定你的构造型注解,注册为BeanID生成策略,这个生成器基于接口BeanNameGenerator实现generateBeanName方法,你可以自己写个类去自定义策略。默认使用org.springframework.context.annotation.AnnotationBeanNameGenerator生成器,也就是类名首字符小写的策略

Performer类,它注册的BeanIDperformer.并且可以自定义ID

resource-pattern

对资源进行筛选的正则表达式,这边是个大的范畴,具体细分在include-filterexclude-filter中进行

scope-resolver

scope解析器 ,与scoped-proxy只能同时配置一个

scoped-proxy

scope代理,与scope-resolver只能同时配置一个

use-default-filters

默认为true,这就意味着会扫描指定包下的全部的标有@Component的类, 
并注册成bean.也就是@Component的子注解@Service,@Reposity等。

所以如果仅仅是在配置文件中这么写 
默认为true,base-package包或者子包下的jun所有的进行java类进行扫描,并把匹配的java类注册成bean 

 

<context:component-scan>有以下子标签:

子标签

说明

<context:include-filter>

指定扫描的包名

若使用include-filter去定制扫描内容,要在use-default-filters="false"的情况下,不然会失效,被默认的过滤机制所覆盖

参数

描述

type

扫描的过滤器的类型

过滤器类型

描述

annotation

过滤器扫描使用注解所标注的那些类,通过expression属性指定要扫描的注释

assignable

过滤器扫描派生于expression属性所指定类型的那些类

aspectj

过滤器扫描与expression属性所指定的AspectJ表达式所匹配的那些类

custom

使用自定义的org.springframework.core.type.TypeFliter实现类,该类由expression属性指定

regex

过滤器扫描类的名称与expression属性所指定正则表示式所匹配的那些类

 

expression

扫描的完整包名或包名的表达式

 

<context:exclude-filter>

指定不扫描的包名

use-default-filters="false"的情况下,exclude-filter是针对include-filter里的内容进行排除

参数

描述

type

扫描的过滤器的类型

过滤器类型

描述

annotation

过滤器扫描使用注解所标注的那些类,通过expression属性指定要扫描的注释

assignable

过滤器扫描派生于expression属性所指定类型的那些类

aspectj

过滤器扫描与expression属性所指定的AspectJ表达式所匹配的那些类

custom

使用自定义的org.springframework.core.type.TypeFliter实现类,该类由expression属性指定

regex

过滤器扫描类的名称与expression属性所指定正则表示式所匹配的那些类

 

expression

扫描的完整包名或包名的表达式

 

示例

<context:component-scan base-package="com.test.myapp">

  <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />

</context:component-scan>

示例

<context:component-scan base-package="com.wjx.betalot" <!-- 扫描的基本包路径 -->

annotation-config="true" <!-- 是否激活属性注入注解 -->

<!-- BeanID策略生成器 -->

name-generator="org.springframework.context.annotation.AnnotationBeanNameGenerator"  

<!-- 对资源进行筛选的正则表达式,这边是个大的范畴,具体细分在include-filterexclude-filter中进行 -->

resource-pattern="**/*.class" 

<!-- scope解析器 ,与scoped-proxy只能同时配置一个 -->

scope-resolver="org.springframework.context.annotation.AnnotationScopeMetadataResolver" 

scoped-proxy="no" <!-- scope代理,与scope-resolver只能同时配置一个 -->

use-default-filters="false"> <!-- 是否使用默认的过滤器,默认值true -->

            

<!-- 注意:若使用include-filter去定制扫描内容,要在use-default-filters="false"的情况下,不然会“失效”,被默认的过滤机制所覆盖 -->                   

<!-- annotation是对注解进行扫描 -->

<context:include-filter type="annotation" expression="org.springframework.stereotype.Component"/> 

<!-- assignable是对类或接口进行扫描 -->

<context:include-filter type="assignable" expression="com.wjx.betalot.performer.Performer"/>

<context:include-filter type="assignable" expression="com.wjx.betalot.performer.impl.Sonnet"/>

            

<!-- 注意:在use-default-filters="false"的情况下,exclude-filter是针对include-filter里的内容进行排除 -->

<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>

<context:exclude-filter type="assignable" expression="com.wjx.betalot.performer.impl.RainPoem"/>

 <context:exclude-filter type="regex" expression=".service.*"/> 

 

</context:component-scan>

 

 

 

来自 <https://www.cnblogs.com/wkrbky/p/5930648.html>