1

抽象 EJB とその 2 つのサブクラスがあります。私の管理対象 Bean では、抽象型のフィールドが必要であり、サブクラスのいずれかのインスタンスを使用してページに渡されるパラメーターに応じて初期化します。インジェクションを使用してこれを行う方法はないと思います。古き良きJNDIルックアップを使用する必要があります...または、インジェクションを使用できるように再設計する方法がありますか?

リビジョンEJB 抽象を定義できないと思いますが、状況は変わりません。AbstractEJB が抽象的でなくても、そのサブクラスのみをインスタンス化したい。

@Stateless
public abstract class AbstractEJB {
    public abstract void method1();
}

@Stateless
public class Implementation1 extends AbstractEJB () {
    public void method1() { ... }
}

@Stateless
public class Implementation2 extends AbstractEJB () {
    public void method1() { ... }
}

@ManagedBean 
public class MyManagedBean {

    @EJB
    AbstractEJB myEJB; //has to be initialized with either Implementation1 or Implementation2 instance
}
4

2 に答える 2

3

これは、EJB の意図された使用方法ではありません。実装を注入するのではなく、インターフェースを注入します。

インターフェース (EJB 3.0 で必要) と抽象クラス (EJB を抽象非 EJB クラスから継承させることができます。抽象 EJB はコンテナーによってインスタンス化されることを意図しているため、意味がありません) を考え出します。それぞれの注釈の「名前」パラメーターを使用します。

public abstract class Abstract implements MyEJBIntf {
    public abstract void method1();
}

@Stateless(name="EJB1") // defaults to "EJB1" anyway
public class EJB1 extends Abstract { ... }

@Stateless
public class EJB2 extends Abstract { ... }

@ManagedBean 
public class MyManagedBean {
    @EJB(name="EJB1") // or "EJB2"
    MyEJBIntf myEJB; 
}
于 2012-09-28T00:11:50.883 に答える
-3

春をチェックしてください。必要なものが見つかると思います。
http://www.mkyong.com/spring/how-to-define-bean-properties-in-spring/
http://static.springsource.org/spring/docs/2.5.3/reference/beans.html

于 2012-09-27T23:17:41.617 に答える