kaq*_*qao 3 java spring spring-ioc
我已经使用Spring几十年了,但之前从未涉及过这个用例.
有没有办法注入所有使用特定注释注释的bean,例如所有带有@Service或者全部的bean @CustomAnnotation?
我唯一的想法是注入上下文,获取所有 bean并手动过滤.如果这是唯一的方法,那么Spring是否会公开一个递归扫描类层次结构以进行(元)注释的方法(因为大多数Spring注释可以用作元注释)?
该@ComponentScan注解指定includeFilters和excludeFilters属性.
要仅扫描用@Service您修饰的类, 可以禁用useDefaultFilters并仅包含Service注释:
@ComponentScan(useDefaultFilters = false,
includeFilters = @Filter(Service.class))
Run Code Online (Sandbox Code Playgroud)
要仅扫描自定义注释,您可以编写类似的东西:
@ComponentScan(useDefaultFilters = false,
includeFilters = @Filter(CustomAnnotation.class))
Run Code Online (Sandbox Code Playgroud)
作为倍数类中指定 value/classes的@Filter,一个OR逻辑被应用.
请注意,@Filter注释接受类(es)作为value/classes属性,但这些是由Spring根据type值解释的@Filter.
默认情况下,type具有值FilterType.ANNOTATION.
要过滤特定注释(在您的情况下),此默认值适合您要在注释本身上过滤候选项.
这里在FilterType枚举类中定义的值:
public enum FilterType {
ANNOTATION,
ASSIGNABLE_TYPE,
ASPECTJ,
REGEX,
CUSTOM
}
Run Code Online (Sandbox Code Playgroud)
请注意@Filter, classes/value但不仅适用于.
你确实有两种替代方式:
评估classes/value属性(如您的情况)
评估pattern属性.
第一种方式期望有type:ANNOTATION,ASSIGNABLE_TYPE或CUSTOM.
而第二种方式期望具有type:REGEX或ASPECTJ.
| 归档时间: |
|
| 查看次数: |
332 次 |
| 最近记录: |