1

我有抽象 EJB 和它的两个子类。在我的托管 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 没有意义,因为它们应该由容器实例化)。使用各个注解的“name”参数:

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

请检查 Spring,我想你可以找到你需要的东西。
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 回答