3

完整的句子取自 EJB3.2 规范:

在与无接口视图的引用交互时,客户端不得对引用的内部实现做出任何假设,例如引用中可能存在的任何特定于实例的状态

我实际上是在试图理解这实际上意味着什么,我想知道是否有人可以提供一些例子。

编辑
上面的句子取自第 3.4.4 节 Session Bean 的无接口视图,也许这个信息有帮助

4

1 回答 1

1

生成无接口视图代理时,EJB 容器必须创建 EJB 类的子类并覆盖所有公共方法以提供代理行为(如安全性、事务)。

您可以使用以下方法获取对 bean 的引用(例如,将其传递给另一个 ejb):

NoInterfaceBean bean = ejbContext.getBusinessObject(NoInterfaceBean.class);

这将返回一个类类型与 bean 类本身相同的引用(通常,如果 EJB 具有业务接口,它将返回接口类),但它不是对 NoInterfaceBean 实例的引用(而是对具有相同名称的代理类)。将其视为对您的 bean的拉皮条版本的引用,您对此

不得对内部实施做出任何假设

它与“普通”EJB 基本相同。您知道 bean 实例周围有一些魔力,但是由于您将接口作为类类型,因此很明显每个实现接口的类都可以有不同的内部实现。

因此,规范在这一点上强调了这种差异。即使它看起来像是对您的具体类的引用,它也不是(正如他们在规范JSR-000345 Enterprise JavaBeansTM 3.2 Final Release的下一段中所说:

尽管引用对象与对应的 bean 类类型是类型兼容的,但是在引用的内部实现和 bean 实例的实现之间并没有规定的关系。

于 2017-07-28T13:22:47.877 回答