我有一个框架,其中必须考虑具有某个框架注释的所有对象,以使@Conditional
Spring注释工作。我宁愿抽象Spring并为我的消费者简化API。例如,我的消费者有类FooOne
和FooTwo
,其注释为Bar
- 我希望FooOne
和FooTwo
自动被视为{{1}注释。
@Conditional(Baz.class)
我有两个想法:
@Bar("blahblah")
@Conditional(Baz.class) // I want this to be implicit
public class FooOne {
// stuff
}
@Bar("blahblahblah")
@Conditional(Baz.class) // I want this to be implicit
public class FooTwo {
// stuff
}
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Configuration
//@Conditional(Baz.class) - see second bullet below
public @interface Bar {
// stuff
}
public class Baz implements Condition {
@Override
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
Map<String,Object> barMetaData = annotatedTypeMetadata.getAnnotationAttributes("Bar");
// do stuff
return something;
}
}
)上添加@Conditional
注释,我的框架使用者(BaseBar
,FooOne
)应该从基类继承。但FooTwo
注释不是继承的(如JavaDoc中所指定的那样),因此Spring无法阅读基类上的@Conditional
注释。@Conditional
注释作为应用于此课程的现有注释之一(例如@Conditional
)的元注释。在这种情况下,Spring正在读取Bar
注释,但传递到@Conditional
的{{1}}现在代表注释(AnnotatedTypeMetaData
)上的(元)注释,而不是类本身(Condition
,Bar
)。这对我没有帮助,因为我需要阅读FooOne
中的实际类注释(阅读FooTwo
中Condition
的元数据)。有没有办法解决这个问题 - 还有其他选择吗?例如,当Bar
用作元注释时,有没有办法访问这些类注释?或者有没有办法包装Baz
以使其继承?或者任何方式来扩展Spring @Conditional
- 解析代码以使其更适合这个用例?