2011-04-03 57 views
5

我正在開發一個Java EE 6的應用程序。我廣泛使用CDI,我的問題是,@Inject和@Produces與SeIn中的@In和@Out相同嗎?現在我們有CDI,@In和@Out註釋是否還在使用?Seam的雙向注入和焊接

回答

11

在@In和@Out註釋仍然使用 現在我們有CDI?

@In@Out是縫2個註釋,以便它們不會在Java EE中使用6

我的問題是,是@Inject和 @Produces一樣@In和@Out爲 煤層?

@Inject@Produces完全一樣,但它們大體相當。主要的區別是,當需要(由這需要依賴的組分控制)Java EE 6的依賴性被生產,而在煤層的東西是準備使用別處被儘快執行2注出(由受控組件,它提供了依賴)

以登錄爲例如:

  • 在接縫2,經認證的用戶在已經成功登錄後立即注出到期望的範圍(如會議)的登錄組件本身。有一個通常適合用例(會話)的範圍,但是不是提供的依賴項(會話)的範圍。
  • Java EE 6中
  • ,一個會話範圍登錄分量執行認證,並且存儲在一個私有字段已認證用戶。該字段然後由生產者方法控制。所以每當另一個組件請求驗證的用戶,像這樣進行的:

    @Produces @LoggedIn User getCurrentUser() { 
         return user; 
        } 
    

這是爲什麼?我聽到你問...

的原因很簡單。 Weld/Java EE 6通過代理(大多數)依賴性獲得了巨大的性能提升。而且它不可能代理異常:-)

除此之外,Java EE 6面向需求的方法(在需要時請求它)感覺優於Seam 2(生成並存儲它) 。

+0

揚,謝謝你非常有幫助的答案。您提到@In和@Out是Seam 2註釋,他們是否在seam 3中棄用? – arg20 2011-04-05 04:31:33

+0

不僅如此 - 它們不可用。它們是Seam 2 jar的一部分,並且這個庫不在JEE 6中部署,所以你根本不能使用它們。 – 2011-04-05 04:59:28

+1

Seam2!= Seam3只有名字相同。 Seam3是一個全新的實現。 – 2011-08-30 02:03:44