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

时间:2010-08-01 06:28:06

标签: java ejb-3.0

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

  

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

     

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

     

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

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

1 个答案:

答案 0 :(得分:15)

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

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

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

相关问题