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

Is it ok to define ejb session bean references in a superclass

我的服务中使用了很多会话 bean classes classes。每次我需要在服务中定义会话 bean 引用是很痛苦的 class.

因此,我只是想知道我是否可以像下面这样使用。即使我只需要 SessionBean1,当我初始化 MyService class 时那些 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();
    }
}

谢谢

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

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