@ComponentScan 注释指定了includeFilters 和excludeFilters 属性。
要仅扫描带有 @Service 修饰的类,您可以禁用 useDefaultFilters 并仅包含 Service 注释:
@ComponentScan(useDefaultFilters = false,
includeFilters = @Filter(Service.class))
要只扫描自定义注释,你可以写一个类似的东西:
@ComponentScan(useDefaultFilters = false,
includeFilters = @Filter(CustomAnnotation.class))
由于在@Filter 的value/classes 中指定了多个类,因此应用OR 逻辑。
请注意,@Filter 注释接受类作为 value/classes 属性,但 Spring 根据 @Filter 的 type 值解释这些。
默认情况下,type 的值为 FilterType.ANNOTATION。
要过滤特定注释(如您的情况),此默认值适合您要过滤注释本身的候选者。
这里的值定义在FilterType枚举类中:
public enum FilterType {
ANNOTATION,
ASSIGNABLE_TYPE,
ASPECTJ,
REGEX,
CUSTOM
}
另请注意,@Filter 可与 classes/value 一起使用,但不仅限于此。
您确实有两种替代方法:
第一种方式期望为type:ANNOTATION、ASSIGNABLE_TYPE 或CUSTOM。
而第二种方式预计具有 type : REGEX 或 ASPECTJ。