Session 在超类中定义ejb会话bean引用可以吗

Session 在超类中定义ejb会话bean引用可以吗,session,ejb-3.0,Session,Ejb 3.0,我的服务类中使用了许多会话bean类。每次我需要在服务类中定义会话bean引用时,都会很痛苦 因此,我只是想知道我是否可以像下面这样使用。即使我只需要SessionBean1,在初始化MyService类时这些EJB是否已初始化?如果是这样的话,这可能是矫枉过正 public class BaseService { @EJB protected SessionBean1 ejb1; @EJB protected SessionBean1 ejb2; @EJ

我的服务类中使用了许多会话bean类。每次我需要在服务类中定义会话bean引用时,都会很痛苦

因此,我只是想知道我是否可以像下面这样使用。即使我只需要SessionBean1,在初始化MyService类时这些EJB是否已初始化?如果是这样的话,这可能是矫枉过正

public class BaseService {
    @EJB
    protected SessionBean1 ejb1;
    @EJB
    protected SessionBean1 ejb2;
    @EJB
    protected SessionBean1 ejb3;
}

@Stateless
public class MyService extends BaseService {
    public void methodA() {
        super.ejb1.findAll();
    }
}

谢谢

是的,规范要求容器支持超类注入


这取决于“初始化”是什么意思。如果您自己创建MyService实例,那么注入将根本不起作用;MyService需要由容器创建(可以是servlet、cdibean、ejbbean等)。然后,容器显然必须做一些工作来创建一个代理对象注入到字段中,但它可能不会创建实际的bean实例。对于无状态会话bean,在实际调用方法之前,可能不会从bean池创建或分配实际的bean实例。对于有状态会话bean,容器将在创建MyService时创建一个实例。

是的,MyService本身也是一个会话bean(上面编辑的源代码)。所以,在上面的例子中,只有SessionBean1是从池中创建或分配的?这就是我想知道的。我可能有几十个会话bean,但希望在超级类(BaseService)中声明引用。然后,我可以在其他服务类中使用任何会话bean,而不必声明会话bean引用。我想知道这是否是一种可接受的方法。谢谢您的回答。这取决于SessionBean1是否是无状态会话bean。如果是,那么注入您不需要的引用就可以了。是的,SessionBean1也是无状态的。非常感谢。