0

たとえば、この質問では次のように表示されます。

@ManagedBean
@SessionScoped
public class LoginBean {

@EJB
private LoginUserLocal loginUser;
private boolean loggedIn = false;
private User user;
private StreamedContent image;

@EJB アノテーションは、これらのインスタンスをこのクラスに自動的に注入しますか?

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

4

1 に答える 1

3

@EJB アノテーション (および @Resource、@WebServiceRef など) には、次の 2 つの目的があります。

コンポーネントの名前空間で参照を宣言します。たとえば、@EJB(name="myEJB") は参照 java:comp/env/myEJB を作成します。フィールドに注釈を付けて名前を指定しない場合、参照 java:comp/env/com.example.MyClass/myField が作成されます。注釈がフィールドまたはセッター メソッドで宣言されている場合、コンテナーはコンポーネントの作成時に注入を実行します。参照がルックアップ ("java:comp/env/myEJB") のために解決されているか、インジェクションのために解決されているかに関係なく、参照がどのように解決されるかは異なります。

EE 6+ が使用されている場合、ルックアップ属性には、ターゲットを解決するための JNDI ルックアップが必要です。一部のアプリケーション サーバーは、ベンダー固有に指定されている MappedName をサポートしています。これは通常、ルックアップを実行することによって実装されます。アプリケーション サーバーは、展開時にバインディングをサポートします。これは通常、ルックアップを実行することによって実装されます。他のバインディング情報が提供されず、Bean インターフェース (beanInterface またはフィールド タイプ) がアプリケーション内の単一の EJB によってのみ実装されている場合、EJB 仕様では、それにフォールバックする必要があります。他のバインディング情報が提供されず、#4 が機能しない場合、一部のアプリケーション サーバーは、ref 名に基づいてサーバーの名前空間でルックアップを実行しようとします (たとえば、java:comp/env/myEJB は、サーバー名前空間)。

于 2013-05-06T13:37:46.210 に答える