- <context:component-scan>用于自动扫描装配注解类
- 在xml配置了这个标签后,spring可以自动去扫描base-pack下面或者子包下面的java文件
- 默认情况下,<context:component-scan>查找使用构造型(stereotype)注解所标注的类,如果扫描到有@Component @Controller @Service @Repository等这些注解的类,则把这些类注册为bean
属性 |
描述 |
base-package |
扫描的基本包路径,标识了<context:component-scan>元素所扫描的包,可以使用一些通配符进行配置 |
annotation-config |
是否激活属性注入注解,<context:component-scan>元素也完成了<context:annotation-config>元素的工作,开关就是这个属性,false则关闭属性注入注解功能 |
name-generator |
这个属性指定你的构造型注解,注册为Bean的ID生成策略,这个生成器基于接口BeanNameGenerator实现generateBeanName方法,你可以自己写个类去自定义策略。默认使用org.springframework.context.annotation.AnnotationBeanNameGenerator生成器,也就是类名首字符小写的策略 如Performer类,它注册的Bean的ID为performer.并且可以自定义ID |
resource-pattern |
对资源进行筛选的正则表达式,这边是个大的范畴,具体细分在include-filter与exclude-filter中进行 |
scope-resolver |
scope解析器 ,与scoped-proxy只能同时配置一个 |
scoped-proxy |
scope代理,与scope-resolver只能同时配置一个 |
use-default-filters |
默认为true,这就意味着会扫描指定包下的全部的标有@Component的类, 所以如果仅仅是在配置文件中这么写 |
注
- scope-resolver与scoped-proxy只能配置一个,配置了scope-resolver后你要使用代理,可以配置@Scope总的proxyMode属性项
- 如果配置了<context:component-scan>那么<context:annotation-config/>标签就可以不用再xml中配置了,因为前者包含了后者。
<context:component-scan>有以下子标签:
子标签 |
说明 |
||||||||||||||||||
<context:include-filter> |
指定扫描的包名 若使用include-filter去定制扫描内容,要在use-default-filters="false"的情况下,不然会“失效”,被默认的过滤机制所覆盖
|
||||||||||||||||||
<context:exclude-filter> |
指定不扫描的包名 在use-default-filters="false"的情况下,exclude-filter是针对include-filter里的内容进行排除
|
示例
<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" <!-- 是否激活属性注入注解 --> <!-- Bean的ID策略生成器 --> name-generator="org.springframework.context.annotation.AnnotationBeanNameGenerator" <!-- 对资源进行筛选的正则表达式,这边是个大的范畴,具体细分在include-filter与exclude-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> |