如何避免我的框架消费者必须使用Spring @Conditional注释?

时间:2015-09-21 10:54:20

标签: java spring annotations

我有一个框架,其中必须考虑具有某个框架注释的所有对象,以使@Conditional Spring注释工作。我宁愿抽象Spring并为我的消费者简化API。例如,我的消费者有类FooOneFooTwo,其注释为Bar - 我希望FooOneFooTwo自动被视为{{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注释,我的框架使用者(BaseBarFooOne)应该从基类继承。但FooTwo注释不是继承的(如JavaDoc中所指定的那样),因此Spring无法阅读基类上的@Conditional注释。
  • 使用@Conditional注释作为应用于此课程的现有注释之一(例如@Conditional)的元注释。在这种情况下,Spring正在读取Bar注释,但传递到@Conditional的{​​{1}}现在代表注释(AnnotatedTypeMetaData)上的(元)注释,而不是类本身(ConditionBar)。这对我没有帮助,因为我需要阅读FooOne中的实际类注释(阅读FooTwoCondition的元数据)。

有没有办法解决这个问题 - 还有其他选择吗?例如,当Bar用作元注释时,有没有办法访问这些类注释?或者有没有办法包装Baz以使其继承?或者任何方式来扩展Spring @Conditional - 解析代码以使其更适合这个用例?

0 个答案:

没有答案
相关问题