2017-01-26 20 views
0

私はjavaeeを学習しています。cdiの主な使い方については、@requestscope、@applicationscopeなどのアノテーションを使用してjsf管理Beanに最初に戻っていました。 javaeeのバージョンcdiはどこでも入手できます(ejb beanの中でも)。質問があるので、どのように私のローカルステートレスejbの中に注入されるクラスに注釈を付ける必要がありますか? @RequestScopeのようなアノテーションはすべてjsfのものですが、私はjsfを使用していないため、これを求めています。とにかくデフォルトとしてマークされているので、@Defaultは十分ですか? @ Dependentより良い選択ですか?jsfなしのejbプロジェクトでのcdiの使用

@Stateless 
public class FooEjb{ 
@Inject Bar b; 
} 

// what annotation to put here? 
public class Bar { 
... 
} 

答えて

0

はい、JavaEEでCDIを使用するためにJSFは必要ありません。

JSFを使用せずにCDIを使用している場合は、javax.enterprise.contextパッケージのスコープ注釈を使用してください。

@Defaultは、qualifierであり、名前としてデフォルトの修飾子が示唆されています。コンテナ内に同じクラスの複数の実装/インスタンスがある場合は、修飾子を使用して区別できます。

@Dependentは、デフォルトの有効範囲であるscopeです。これは、注入されたクラスのスコープに依存することを意味します。@Dependentクラスの新しいインスタンスは、注入されるクラスの新しいインスタンスが作成されるたびに注入されます。

CDIを有効にするには、beans.xmlファイルをWebプロジェクトのWEB-INFディレクトリ、またはEARまたはEJBプロジェクトのMETA-INFディレクトリに配置する必要があります。

+0

つまり、すべてのBeanは自動的に@Defaultと@Dependentになりますか?もし私の豆の3種類のインプラントがあるなら、3回@Defaultがあるので、私は@Alternativeを使うべきでしょうか? –

+0

@devhedgehog:そうでないと宣言されていない限り、コンテナ内のすべてのBeanは '@ Default'と' @ Dependent'です。あなたが2つの実装を持っているなら、 '@ Alternative'はうまくいくでしょうが、2つ以上の場合、あなたは自分の' @ Qualifiers'を書くことができます。 https://dzone.com/articles/define-cdi-qualifier – ares

+0

私はそれまでこれを理解しています。今、問題は "@EJB"を使わずにejbステートレスクラスを挿入する方法です。 –

0

java ee documentationによれば、注釈は必要ありません。単純なPOJOは注入可能なBeanであり、@Defaultアノテーションを受け取ります。 JSFを使用する必要はありません。

+0

私はそれらのpojosがデフォルトで "@Default"と "@Dependent"の市場であると思いますか、間違っていますか? –

+0

はい、こちらを参照してくださいhttps://docs.oracle.com/javaee/7/tutorial/cdi-basic008.htm#GJBBK –

+0

これまでのところはっきりしていましたが、今質問はどのように私は ' @ EJB 'アノテーション –

関連する問題