2

CDI 仕様のセクション 5.4.1 は、そうでなければ有効な Bean が宣言されている場合、プロキシできない (したがって、注入できない) と述べていますfinal。仕様には根拠がなく、この決定の理由が思いつきません。

継承用に明示的に設計されていないクラスは継承を禁止する必要があるという設計規則に固執しようとしています。そのため、CDI 仕様は悪い設計を強制しているようです (そして CheckStyle を泣かせます)。

なぜそうなのか、それに対して何ができるのか?

ありがとうございました。

4

2 に答える 2

5

クラスのプロキシを作成すると、それから継承する (または、可能であればインターフェイスを実装する) ため、クラスが final の場合、継承できず、プロキシを作成できません。

CDI を使用する場合は、非最終クラスが必要です。もう 1 つのオプションは、CDI をまったく使用しないことです。

于 2012-05-23T14:31:14.177 に答える
1

最終クラスでメソッド インターセプト手法を使用する唯一の方法は、クラス自体を変更することです。これは、クラス ファイルがディスク上で変更される「拡張」と呼ばれるプロセスを通じて行われていました。今日では、load-time weavingと呼ばれるものを使用できます。これはロード中にクラスを変更する手法です。AspectJ はこの手法を使用します。

于 2012-05-23T14:38:33.670 に答える