Java 使用特定注释注入所有bean
我已经使用Spring几十年了,但以前从未遇到过这个用例 是否有一种方法可以注入所有带有特定注释的bean,例如带有Java 使用特定注释注入所有bean,java,spring,spring-ioc,Java,Spring,Spring Ioc,我已经使用Spring几十年了,但以前从未遇到过这个用例 是否有一种方法可以注入所有带有特定注释的bean,例如带有@Service的所有bean或带有@CustomAnnotation的所有bean 我唯一的想法就是注入上下文,获取所有bean并手动过滤。如果这是唯一的方法,Spring是否会公开一个递归扫描类层次结构以查找(元)注释的方法(因为大多数Spring注释都可以用作元注释)?组件扫描注释指定includeFilters和excludeFilters属性。 要仅扫描用@Service
@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类型
:注释
,可分配类型
或自定义
虽然第二种方法希望有astype
:REGEX
或ASPECTJ
它们必须被注释吗?可以插入类型的列表。