プロパティ付きの注釈があるとします。
@Named(name = "Steve")
private Person person
プロパティを取得するものを含め、いくつかのメタアノテーションを使用して複合アノテーションを作成したい
@Named
@AnotherAnnotation
@YetAnotherAnnotation
public @interface CompoundAnnotation {
...
}
複合アノテーションのプロパティをメタアノテーションの1つに渡す方法はありますか?
たとえば、次のようなものです。
@CompoundAnnotation(name = "Bob")
private Person person;
これは同等ですが、よりもはるかに便利です
@Named(name = "Bob")
@AnotherAnnotation
@YetAnotherAnnotation
private Person person;
ありがとう!
アノテーションの例を選択しなかったことをお詫びします-javax.inject。@Namedアノテーションを念頭に置いておらず、プロパティを持つ任意のアノテーションだけを考えていました。
皆様のご回答・ご感想ありがとうございました。
これが不可能なのは間違いないようです。ただし、たまたま私のケースインポイントには簡単な回避策があります。これは、誰かに役立つ場合に備えて共有します。
Springを使用していて、メタアノテーションとして@Componentを持つ独自のアノテーションを作成したいので、コンポーネントのスキャンによって自動検出されます。ただし、BeanNameプロパティ(@Componentのvalueプロパティに対応)を設定して、カスタムBean名を設定できるようにすることも必要でした。
Springの思いやりのある人たちが、まさにそれを可能にしたことがわかりました。AnnotationBeanNameGeneratorは、渡されたアノテーションの「value」プロパティを取得し、それをBean名として使用します(もちろん、デフォルトでは、 @Componentであるか、メタアノテーションとして@Componentを持つアノテーションのみが渡されます)。振り返ってみると、これは最初から私には明らかだったはずです。これは、@Serviceや@Registryなどのメタアノテーションとして@Componentを使用する既存のアノテーションがBean名を提供する方法です。
それが誰かに役立つことを願っています。それでも、これがもっと一般的に不可能なのは残念だと思います!