SessionContext.getBusinessObject()在文档中描述如下,
获取可用于通过给定业务接口调用当前bean的对象.
参数:businessInterface - 此会话Bean的本地业务接口或远程业务接口之一.
返回:与给定业务接口对应的业务对象.
我不能在Java中使用'this'关键字来实现相同的目标吗?这些有何不同?
Dav*_*ins 15
这里的动机是大多数EJB实现都在代理上工作.你不会把它想象成老派的AOP.业务接口由EJB容器实现,通常通过简单的java.lang.reflect.Proxy实现,并且该对象被交给系统中通过@EJB或JNDI查询请求ejb的每个人.
代理连接到容器,并且它上面的所有调用都直接进入容器,该容器将执行安全检查,启动/停止/挂起事务,调用拦截器等等,然后最终将调用委托给bean实例 - 当然,由于抛出任何异常,需要进行任何清理 - 然后最终通过代理将返回值传递给调用者.
直接调用this.foo(),或者将'this'传递给调用者以便他们也可以直接调用,将跳过所有这些并且容器将被有效地从图片中删除.'getBusinessObject(Class)'方法允许bean实例基本上获取自身的代理,因此它可以调用自己的方法并利用与之关联的容器管理服务 - 拦截器,事务管理,安全实施等.