【发布时间】:2017-07-24 12:11:46
【问题描述】:
EJB 3.2 规范第 3.4.7.2 节无状态会话 Bean 显示以下代码来演示相等性:
@EJB Cart cart1;
@EJB Cart cart2;
...
if (cart1.equals(cart1)) { // this test must return true
...
}
【问题讨论】:
EJB 3.2 规范第 3.4.7.2 节无状态会话 Bean 显示以下代码来演示相等性:
@EJB Cart cart1;
@EJB Cart cart2;
...
if (cart1.equals(cart1)) { // this test must return true
...
}
【问题讨论】:
好吧,这并不明显,我们实际上是在谈论对容器管理的代理的引用。
但是,该示例主要与 Stateful bean 一起使用,其中相同的等于指令返回 false。在这种情况下,容器会返回一个新的引用,最终得到两个不同的 bean。
更新
嗯...我犯了一个错误,因为我读过cart1.equals(cart2)。在这种情况下,我不得不说,正如你所注意到的,这几乎是显而易见的。
但是,仅仅因为它不是您使用new 获得的简单引用,而是应用服务器正在为您管理的东西,所以很高兴知道它正在为您提供相同的对象身份。这在Stateful 的情况下尤其正确和基本。
现在我想不出Stateless bean 与Stateful 相比具有相同对象标识的任何有用用途,但我确信有一些示例。
【讨论】:
Stateful 会话bean 声明cart1.equals(cart1) 必须-也-返回true