假设我有一个带有属性的注释:
@Named(name = "Steve")
private Person person
我想用几个元注释创建一个复合注释,包括一个带有属性的注释
@Named
@AnotherAnnotation
@YetAnotherAnnotation
public @interface CompoundAnnotation {
...
}
有没有一种方法可以将复合注释的属性传递给元注释之一?
例如,像这样:
@CompoundAnnotation(name = "Bob")
private Person person;
这相当于,但比
@Named(name = "Bob")
@AnotherAnnotation
@YetAnotherAnnotation
private Person person;
谢谢!
PS 为我对示例注释的错误选择表示歉意 - 我没有想到 javax.inject.@Named 注释,只是一些具有属性的任意注释。
谢谢大家的回答/评论。
显然,这是不可能的。然而,碰巧我的案例有一个简单的解决方法,我将分享它以防它帮助任何人:
我正在使用 Spring 并希望创建自己的注释,将 @Component 作为元注释,从而被组件扫描自动检测到。但是,我还希望能够设置 BeanName 属性(对应于 @Component 中的 value 属性),这样我就可以拥有自定义 bean 名称。
好吧,事实证明,Spring 的深思熟虑的人使这样做成为可能 - AnnotationBeanNameGenerator 将采用它传递的任何注释的“值”属性并将其用作 bean 名称(当然,默认情况下,它会仅获得传递的 @Component 或将 @Component 作为元注释的注释)。回想起来,这对我来说从一开始就应该是显而易见的——这就是现有的以@Component 作为元注释的注释,例如@Service 和@Registry,可以提供 bean 名称。
希望这对某人有用。我仍然认为这是一种耻辱,虽然这不可能更普遍!