2010-08-01 17 views
6

的SessionContext.getBusinessObject()在文檔被描述如下,SessionContext.getBusinessObject()的返回值與bean中使用的「this」關鍵字不同麼?

獲取可用於通過給定業務接口來調用當前Bean的對象。

參數: businessInterface - 此會話bean的本地業務接口或遠程業務接口之一。

返回: 與給定業務接口對應的業務對象。

我不能在Java中使用'this'關鍵字來完成相同的任務嗎?這些有什麼不同?

回答

14

這裏的動機是大多數EJB實現工作在代理上。考慮到它是老派的AOP,你不會太離譜。業務接口由EJB容器實現,通常通過一個簡單的java.lang.reflect.Proxy來實現,並且這個對象交給系統中的所有人,通過@EJB或JNDI查找請求ejb。

代理連接到容器,所有對它的調用都會直接發送給執行安全檢查,啓動/停止/掛起事務,調用攔截器等的容器,最後將調用委託給bean實例 - 當然由於拋出任何異常而需要進行清理 - 然後最終通過代理將返回值傳遞給調用者。

直接調用this.foo()或將'this'傳遞給調用者,以便他們也可以直接調用,將​​會跳過所有這些,並且容器將被有效地切除圖片。 'getBusinessObject(Class)'方法允許bean實例本質上獲得一個代理,以便它可以調用它自己的方法並利用與之相關的容器管理服務 - 攔截器,事務管理,安全執行等。

+0

一個非常明確的解釋,大衛!謝謝 ! – stratwine 2010-08-02 04:06:16

+0

有人可以確認通過使用SessionContext.getBusinessObject()我們保證@Asynchronous方法將在不同的線程中執行嗎? – 2016-09-01 06:58:22

相關問題