Spring框架

2.11.3  扫描组件

组件被上述注解标识后还需要通过Spring进行扫描才能够侦测到。

  • 指定被扫描的package

<context:component-scan base-package="com.atguigu.component"/>

  • 详细说明

base-package属性指定一个需要扫描的基类包,Spring容器将会扫描这个基类包及其子包中的所有类。

②当需要扫描多个包时可以使用逗号分隔。

③如果仅希望扫描特定的类而非基包下的所有类,可使用resource-pattern属性过滤特定的类,示例:

<context:component-scan 

base-package="com.atguigu.component" 

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

④包含与排除

  • <context:include-filter>子节点表示要包含的目标类

注意:通常需要与use-default-filters属性配合使用才能够达到“仅包含某些 组件”这样的效果。即:通过将use-default-filters属性设置为false, 禁用默认过滤器,然后扫描的就只是include-filter中的规则指定的 组件了。

  • <context:exclude-filter>子节点表示要排除在外的目标类
  • component-scan下可以拥有若干个include-filter和exclude-filter子节点
  • 过滤表达式

类别

示例

说明

annotation

com.atguigu.XxxAnnotation

过滤所有标注了XxxAnnotation的类。这个规则根据目标组件是否标注了指定类型的注解进行过滤。

assignable

com.atguigu.BaseXxx

过滤所有BaseXxx类的子类。这个规则根据目标组件是否是指定类型的子类的方式进行过滤。

aspectj

com.atguigu.*Service+

所有类名是以Service结束的,或这样的类的子类。这个规则根据AspectJ表达式进行过滤。

regex

com\.atguigu\.anno\.*

所有com.atguigu.anno包下的类。这个规则根据正则表达式匹配到的类名进行过滤。

custom

com.atguigu.XxxTypeFilter

使用XxxTypeFilter类通过编码的方式自定义过滤规则。该类必须实现org.springframework.core.type.filter.TypeFilter接口

  • JAR包

必须在原有JAR包组合的基础上再导入一个:spring-aop-4.0.0.RELEASE.jar