可以在超类中定义 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 时创建一个实例。
我的服务中使用了很多会话 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 时创建一个实例。