0

我有一个无状态会话 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;

4

2 回答 2

2

你的代码很好。

@EJB 注释将 bean 注入到您的类中,并且应用程序服务器管理它的生命周期。

我建议阅读或略读相当长的 Java EE教程

“EJB 容器通常创建和维护一个无状态会话 bean 池,开始无状态会话 bean 的生命周期。容器执行任何依赖注入,然后调用注解 @PostConstruct 的方法(如果存在)。bean 现在已准备好开展业务客户端调用的方法。”

于 2012-05-19T00:33:28.627 回答
1

无状态 bean 可以具有表示依赖项的实例变量。

事实上,这甚至是被鼓励的。如果没有实例变量,您可以在许多情况下只在实用程序类中使用静态方法。

然而,不鼓励的是使用代表客户端可观察状态的实例变量。是错误的,但是像实体管理器、jms 队列、JDBC 连接以及因此无状态服务委托(部分)其工作的其他服务等依赖项是绝对可以的。

请注意,注入是实例变量中的真正实例注入。它不是类级别(静态)注入。

于 2012-05-19T17:12:07.143 回答