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

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

获取可用于通过给定业务接口调用当前bean的对象。

参数:businessInterface – 此会话Bean的本地业务接口或远程业务接口之一。

返回:与给定业务接口对应的业务对象。

我不能在Java中使用’this’关键字来实现相同的目标吗? 这些有何不同?

这里的动机是大多数EJB实现都在代理上工作。 你不会把它想象成老派的AOP。 业务接口由EJB容器实现,通常通过简单的java.lang.reflect.Proxy实现,并且此对象将交给系统中通过@EJB或JNDI查找请求ejb的每个人。

代理连接到容器,并且它上面的所有调用都直接进入容器,该容器将执行安全检查,启动/停止/挂起事务,调用拦截器等等,然后最终将调用委托给bean实例 – 当然,由于抛出任何exception,需要进行任何清理 – 然后最终通过代理将返回值传递给调用者。

直接调用this.foo(),或者将’this’传递给调用者,这样他们也可以直接调用,将​​跳过所有这些,并且容器将被有效地剪切掉。 ‘getBusinessObject(Class)’方法允许bean实例基本上获取自身的代理,因此它可以调用自己的方法并利用与之关联的容器管理服务 – 拦截器,事务管理,安全实施等。