java - SessionContext.getBusinessObject() 的返回值与 bean 中使用的 'this' 关键字有何不同?

标签 java ejb-3.0

SessionContext.getBusinessObject() 在文档中描述如下,

Obtain an object that can be used to invoke the current bean through the given business interface.

Parameters: businessInterface - One of the local business interfaces or remote business interfaces for this session bean.

Returns: The business object corresponding to the given business interface.

我不能在 Java 中使用“this”关键字来完成相同的任务吗?这些有何不同?

最佳答案

这里的动机是大多数 EJB 实现都在代理上工作。将其视为老派的 AOP 并不过分。业务接口(interface)由 EJB 容器实现,通常是通过一个简单的 java.lang.reflect.Proxy,这个对象被传递给系统中通过@EJB 或 JNDI 查找请求 ejb 的每个人。

代理连接到容器,对它的所有调用都直接转到容器,容器将执行安全检查、启动/停止/暂停事务、调用拦截器等,然后最终将调用委托(delegate)给 bean实例——当然,由于抛出任何异常而需要进行任何清理——然后最终通过代理将返回值移交给调用者。

直接调用 this.foo() 或将“this”传递给调用者以便他们也可以进行直接调用,将​​跳过所有这些,并且容器将有效地从图片中删除。 “getBusinessObject(Class)”方法允许 bean 实例从本质上获得对自身的代理,因此它可以调用自己的方法并利用与其关联的容器管理服务——拦截器、事务管理、安全实现等。

关于java - SessionContext.getBusinessObject() 的返回值与 bean 中使用的 'this' 关键字有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3381002/

相关文章:

java - Java 中的图像响应 - HTTPServer

java - 使用 Java 从字符串中提取任意 5 位数字

java - Swing 客户端上的 Apache Shiro - EJB 3.1 身份验证授权案例

java - 运行 EJB 示例项目时出现错误 500 : java. lang.NullPointerException

java - Volley JSONObject POST 请求没有响应

java - 从区域设置获取正确的日期格式和时间格式

java - 尝试运行客户端时出现 EJB 异常

java - Maven 中的 Ejb3 依赖

使用 CyclicBarrier 的 Java 循环线程

java - EJB 3 的最佳特性