2016-06-16 12 views
0

私はCDI Beanに注入したいPOJOを持っています。これで、beans.xmlの検出モードを「注釈付き」から「すべて」に変更できることがわかりました。しかし、POJOにアノテーションを定義するbeanを与えるだけでもいいです。私は注釈がうまくいくと思いますが、POJOを注射可能にする単なる目的のための正しい注釈は何ですか?javaクラスが注入可能な正しい注釈は何ですか?

答えて

1

あなたはまったくの注釈を持たないかもしれない、何の注釈は(すなわち、それは管理させるか、CDI Beanに)あなたの豆の注射を行う必要はありません。それがあるべきクラスを注入するために

  • 具象クラス(つまり、抽象的またはインタフェースではない)、またはそれが@Decorator
  • として注釈すべきである@Inject
  • で注釈を付け引数なしのコンストラクタまたはコンストラクタを持つべき
  • EJBコンポーネント定義アノテーションでアノテートしたり、ejb-jar.xmlでEJB Beanクラスとして宣言したりしてはいけません。

これで、すべての通常のクラスを注入できます。また、クラスはBeanアーカイブ内に配置する必要があります。 CDI 1.1からは、暗黙的と明示的の2種類のBeanアーカイブがあります。 Oracleのドキュメントから:

明示的な豆のアーカイブは空のファイルをすることができbeans.xmlの デプロイメントディスクリプタを、含まれているアーカイブには、バージョン 番号が含まれていない、またはbean-とバージョン番号1.1が含まれている、ありますdiscovery-mode 属性はallに設定されています。たとえば:

http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd」 バージョン= "1.1" 豆発見モード= "すべて"> ... CDIを管理することができますそして@Vetoedで注釈を付けたものを除き、明示的なアーカイブ内の任意のBeanを注入します。

暗黙の豆のアーカイブは、スコープタイプの注釈を付け、いくつかの豆 を含むアーカイブでは、何のbeans.xmlの展開 記述が含まれていない、または含まれています bean-discovery-mode属性が注釈付きに設定されたbeans.xmlデプロイメント記述子

暗黙のアーカイブでは、CDスコープタイプの の注釈付き豆だけを管理して注入することができます。

Webアプリケーションの場合、beans.xmlデプロイメント記述子( が存在する場合)は、WEB-INFディレクトリに存在する必要があります。 EJBモジュールまたはJAR ファイルの場合、beans.xmlデプロイメント記述子が存在する場合は、 META-INFディレクトリに存在する必要があります。あなたは豆の発見​​モードannotatedに滞在したいと仮定すると、

1

、あなたはそれがとてもimplicit beanと呼ばれるようになりますあなたのPOJOの豆の定義注釈を持っている必要があります。ここでCDI specから関連引用である:

ビーン定義注釈のセットが含まれています

  • @ApplicationScoped、@SessionScoped、@ConversationScopedと@RequestScoped注釈を、

  • 通常、他のすべてのスコープタイプ

  • @Interceptorおよび@Decoratorアノテーション

  • すべてのステレオタイプ注釈(すなわち、 @Stereotypeで注釈を付けられた注釈)、

  • および@Dependentスコープ注釈。 については

正しいとする注釈 - あなたのユースケースに依存しています。一般的には、Beanのライフサイクル(リクエスト、会話、アプリケーションと同じ長さのアプリケーションスコープ)を考慮する必要があります。しかし、あなたが本当に気にしないなら、私はちょうど@Dependentに行くと言うでしょう。 実際に、Bean検出モードallを持っていて、そのPOJOクラスのアノテーションがない場合は、CDIが@Dependentという名前でピックアップされます。

質問にお答えします。

関連する問題