我有一个无状态会话bean,但是我想添加对另一个bean的引用以便进行一些处理。因此,如果我添加对另一个bean的引用,它会在像这样的实例级变量中显示,
@Stateless
public class AccountFacade extends AbstractFacade<Account> implements AccountFacadeRemote {
@EJB
private BillerFacadeRemote billerFacade;
public AccountFacade() {
super(Account.class);
}
... all other methods...
}
现在,根据定义,无状态bean不应该有任何实例级变量。所以我对这个private BillerFacadeRemote billerFacade;
放在哪里感到很困惑?
答案 0 :(得分:2)
你的代码很好。
@EJB注释是将bean注入到您的类中,应用程序服务器管理它的生命周期。
我建议阅读或浏览相当长的Java EE tutorial。
“EJB容器通常创建并维护一个无状态会话bean池,开始无状态会话bean的生命周期。容器执行任何依赖注入,然后调用注释@PostConstruct的方法(如果存在)。现在bean已准备好让客户调用其业务方法。“
答案 1 :(得分:1)
无状态bean可以使用表示依赖关系的实例变量。
事实上,这甚至受到鼓励。如果没有实例变量,您可以在许多情况下仅在实用程序类中使用静态方法。
然而,不鼓励的是,具有表示客户端可观察状态的实例变量。 那是错误的,但实体管理器,jms队列,JDBC连接等依赖关系,以及无状态服务委托(部分)其工作的其他服务,绝对没问题。
请注意,注入是实例变量中的真实实例注入。 不类级别(静态)注入。