Допустим, у меня есть аннотация со свойством:
@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 (, соответствующее свойству value в @Component), чтобы иметь собственные имена компонентов.
Оказывается, предусмотрительные ребята из Spring сделали возможным сделать именно так, -AnnotationBeanNameGenerator будет принимать свойство 'value' любой переданной аннотации и использовать его в качестве имени компонента (и конечно, по умолчанию он будет получать только переданные аннотации, которые являются @Component или имеют @Component в качестве мета-аннотаций). Оглядываясь назад, это должно было быть очевидным для меня с самого начала -вот как существующие аннотации с @Component в качестве мета-аннотации, такие как @Service и @Registry,может предоставить имена bean-компонентов.
Надеюсь, кому-то это будет полезно. Я все еще думаю, что это позор, что это невозможно в более общем плане!