2017-04-07 71 views
0

這是一個很好的練習問題......在抽象父類中注入常用的CDI beans

我們將JSF託管bean轉換爲JSF 2.2中的CDI bean。在做這件事的時候,似乎在很多豆子中,我們需要一些會話bean。

我們最初打算@Inject這些,但也可將其注入在父「FacesBean」類保護的變量。

  1. 這會是很好的做法?
  2. 不@Inject也是在尚未轉換爲CDI @ManagedBean類工作?

回答

0

於是一個接一個:

1)好的做法呢?

如果你有一個類層次結構,我建議你@Inject成在父私人字段,然後創建一個最小能見度需要(可能保護)getter方法。只要堅持圍繞Java封裝的一般良好實踐規則即可。

2)@ManagedBean@Inject

只要你使用bean發現模式all(使用空beans.xml),你的類將被自動拾取作爲託管豆 - 包括那些@ManagedBean註解。一旦它是一個豆,注射就起作用。所以是的,只要這個類可以自動成爲一個bean(例如,它不是@Vetoed或不可處理的等等),注入將會工作。

+0

事情是,用一個getter聲明一個私有注入變量,爲開發人員敞開大門。仍然在子類中再次注入相同的變量。我們接着注射兩次嗎? –

+0

嗯,我沒有看到如何注入一個受保護的領域,防止開發人員做出完全相同的錯誤 - 但如果你覺得它更好,去做它,它應該工作。爲了回答上面的問題,你會有兩個注入點,因此是的,你會注入兩次(但除非它是'@ Dependent',你實際上只會注入一個代理對象,指向相同的bean底層實例* )。 – Siliarus