Java 使用特定注释注入所有bean

Java 使用特定注释注入所有bean,java,spring,spring-ioc,Java,Spring,Spring Ioc,我已经使用Spring几十年了,但以前从未遇到过这个用例 是否有一种方法可以注入所有带有特定注释的bean,例如带有@Service的所有bean或带有@CustomAnnotation的所有bean 我唯一的想法就是注入上下文,获取所有bean并手动过滤。如果这是唯一的方法,Spring是否会公开一个递归扫描类层次结构以查找(元)注释的方法(因为大多数Spring注释都可以用作元注释)?组件扫描注释指定includeFilters和excludeFilters属性。 要仅扫描用@Service

我已经使用Spring几十年了,但以前从未遇到过这个用例

是否有一种方法可以注入所有带有特定注释的bean,例如带有
@Service
的所有bean或带有
@CustomAnnotation
的所有bean


我唯一的想法就是注入上下文,获取所有bean并手动过滤。如果这是唯一的方法,Spring是否会公开一个递归扫描类层次结构以查找(元)注释的方法(因为大多数Spring注释都可以用作元注释)?

组件扫描注释指定
includeFilters
excludeFilters
属性。
要仅扫描用
@Service
修饰的类,您可以禁用
useDefaultFilters
,并仅包括
服务
注释:

@ComponentScan(useDefaultFilters = false,
                includeFilters = @Filter(Service.class))
要仅扫描自定义注释,可以编写类似的内容:

@ComponentScan(useDefaultFilters = false,
                includeFilters = @Filter(CustomAnnotation.class))
由于在
@Filter
value/classes
中指定了多个类,因此应用了
逻辑


请注意,注释接受类作为
value/classes
属性,但这些类由Spring根据
@Filter
类型
值进行解释
默认情况下,
type
的值为
FilterType.ANNOTATION

若要在特定注释上进行筛选(在您的案例中),此默认值适用于您要在注释本身上筛选候选项的情况

此处为枚举类中定义的值:

public enum FilterType {     
    ANNOTATION,    
    ASSIGNABLE_TYPE,
    ASPECTJ,
    REGEX,
    CUSTOM    
}
还请注意,
@Filter
可与
类/值一起使用,但不限于此。
你确实有两种选择:

  • classes/value
    属性进行赋值(如您的情况)

  • 评估
    模式
    属性

第一种方法希望具有as
类型
注释
可分配类型
自定义


虽然第二种方法希望有as
type
REGEX
ASPECTJ

它们必须被注释吗?可以插入类型的列表。