2

スタンドアロン アプリケーションで使用する目的で、JSR-299 リファレンス実装「Weld」を試してみました。ドキュメントを見て、その魔法に驚嘆しました。

私の質問は、@Inject される特定のオブジェクトのプロデューサーがどのように見つかるかです。

Java コンパイラーは、クラスローダーが簡単に見つけられるアノテーションのヒントを生成するか、すべてのクラスをロードして完全なクラスパスをトラバースして、それらが何を行うかを確認する必要がありますが、これは私にとって非常に非効率的に聞こえるか、まったく異なるアプローチです。

トリックは何ですか?

4

3 に答える 3

4

クラスパスは「Bean アーカイブ」をスキャンします。Bean アーカイブは、META-INF/beans.xml. これらのアーカイブ内のすべての Bean は自動的に に登録され、BeanManagerそれらの注釈が解析されて保存されます。プロデューサーが必要なときはいつでも、Bean マネージャーは適格なプロデューサーについて相談されます。

于 2010-04-09T05:38:25.707 に答える
0

Seamと同じように機能すると思います。クラスパスが実際にスキャンされます。implは、一致するスコープが最小の@produceも検索するため、たとえば、ログインしたユーザーの場合はセッションレベルで、匿名ユーザーの場合はアプリケーションレベルで1つのプロデュースを作成できます。

于 2010-04-04T12:10:33.297 に答える
0

わかりませんが、Hibernate の父親によって部分的に行われたこの @Inject は、SpringSource と Google によって最終的に作り直され、影響を受けました。おそらくGuiceのように機能しますか?

于 2010-04-05T19:11:22.423 に答える