CGLIB を使用してプロキシ オブジェクトを作成する AOP フレームワークを使用してオブジェクトを作成しようとしています。奇妙なことに、「強化された」プロキシ オブジェクトには、以前のクラスにあった注釈がまったくありません。
CGLIB が作成したプロキシの注釈を保持する方法を誰か教えてもらえますか?
乾杯!ニラフ
CGLIB を使用してプロキシ オブジェクトを作成する AOP フレームワークを使用してオブジェクトを作成しようとしています。奇妙なことに、「強化された」プロキシ オブジェクトには、以前のクラスにあった注釈がまったくありません。
CGLIB が作成したプロキシの注釈を保持する方法を誰か教えてもらえますか?
乾杯!ニラフ
CGLIB は、指定されたクラスのサブクラスを作成してプロキシを生成します。注釈定義で明示的に指定されていない限り、注釈はサブクラスに保持されません。@Inheritedアノテーションは、この目的で使用されます。
次のように、定義した注釈でこの注釈を使用し、サブクラスで到達可能にすることができます。
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface MyAnnotation {
}
これは、注釈を「保持」することの問題ではありません。CGLIB プロキシは、実際にはターゲット オブジェクトのクラスのサブクラスとして生成されます。これらのサブクラスには注釈がない場合がありますが、それらのスーパークラス (つまり、独自のクラス) にはまだ注釈があります。使用する注釈を反映するコードは、クラス階層をさかのぼって注釈を探すことができる必要があります。
a) すべてのフレームワークが親クラスを検査するほどスマートであるとは限らない b) たとえそれらが十分にスマートであっても、そうしないことを選択した可能性があるため、これは有効な問題です (私は今自分自身に遭遇しています)。Guice の場合は後者のようです。FWIW、https: //issues.apache.org/jira/browse/WICKET-1130は、これを見つけたときに取り組んでいた問題です。