介绍
指定要扫描某包下的注解
源代码
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Documented
@Repeatable(ComponentScans.class)
public @interface ComponentScan {
@AliasFor("basePackages")
String[] value() default {};
@AliasFor("value")
String[] basePackages() default {};
Class<?>[] basePackageClasses() default {};
Class<? extends BeanNameGenerator> nameGenerator() default BeanNameGenerator.class;
Class<? extends ScopeMetadataResolver> scopeResolver() default AnnotationScopeMetadataResolver.class;
ScopedProxyMode scopedProxy() default ScopedProxyMode.DEFAULT;
String resourcePattern() default "**/*.class";
boolean useDefaultFilters() default true;
ComponentScan.Filter[] includeFilters() default {};
ComponentScan.Filter[] excludeFilters() default {};
boolean lazyInit() default false;
@Retention(RetentionPolicy.RUNTIME)
@Target({})
public @interface Filter {
FilterType type() default FilterType.ANNOTATION;
@AliasFor("classes")
Class<?>[] value() default {};
@AliasFor("value")
Class<?>[] classes() default {};
String[] pattern() default {};
}
}
只能声明类
value属性
指定要扫描的包路径(含子包),可以设置一个字符串,或 字符串 数组
basePackages属性
同 value 属性
basePackageClasses
指定一个类、或多个类,扫描该类所在的包(含子包)
excludeFilters 属性
按照过滤条件排除某些包的扫描
过滤条件有:
-
FilterType.ANNOTATION:按照注解过滤
-
FilterType.ASSIGNABLE_TYPE:按照给定的类型
-
FilterType.ASPECTJ:使用ASPECTJ表达式
-
FilterType.REGEX:正则
-
FilterType.CUSTOM:自定义规则
includeFilters 属性
按照过滤条件只包含某些包的扫描
过滤条件与 excludeFilters 属性相同
nameGenerator
bean的名称的生成器,默认的是BeanNameGenerator
useDefaultFilters
是否开启对 @Controller
,@Repository
,@Service
,@Component
的类进行检测,默认开启
resourcePattern
检测符合条件的类文件,默认是包扫描下的 **/*.class