2013-10-03 18 views
4

通過我在創建託管bean方面所做的所有研究,我沒有注意到的(或者我可能忽略的)是何時使用bean的明確命名,例如, @Named(name = "someBean")什麼時候應該明確命名一個Managed Bean?

我猜我很難理解的是,爲什麼你想命名比你的類名以外的任何豆:

@Named(name = "someBean") 
public class SomeBean implements Serializebale { 
} 

隨着我見過的所有示例中,一些使用明確名稱和一些只使用@Named保留默認的類名稱。這些例子都沒有解釋爲什麼他們使用明確的命名。使用類名以外的任何其他方法嘗試訪問bean似乎更容易混淆。

所以我想問題是,有沒有什麼經驗法則或規則,以當你想提供一個訪問名稱不同於你的類名,或者人們只是做它,如果他們有他們想要的長類名能夠以更少的輸入訪問?

+1

你在問爲什麼有人會給你打一個暱稱。也許公司的政策規定所有的bean必須以CompanyServiceBean結尾,並且你認爲它會讓事情變得混亂。也許這個bean名字很差,但是你不能重命名它,所以你在這裏指定一個更好的名字。真的沒關係。你可以命名這個bean,但是你不需要。 – Kayaman

+0

幾乎可以回答我的問題 –

回答

5

您的問題關於Convention over configuration設計範例。爲了應對過去的錯誤以及其他有關廣泛配置的必要性,自許多Java框架/ API等的最新發布以來,引入了許多默認設置。在這種情況下,JSF/CDI也不例外。

例如,它足以與@ManagedBean來註釋一個bean讓它成爲@RequestScoped並讓它在EL範圍可通過simpleClassName

名字的值()屬性被取爲託管bean名稱。如果name屬性的值未指定或者是空字符串,則managed-bean-name將從全限定類名的非限定類名部分和第一個字符轉換爲小寫形式派生。例如,如果ManagedBean註釋位於具有完全限定類名com.example.Bean的類上,並且註釋中沒有name屬性,則managed bean的名稱將被視爲bean。該註釋附加到的類的全限定類名稱被認爲是managed-bean-class。

託管bean的範圍是使用NoneScoped,RequestScoped,ViewScoped,SessionScoped,ApplicationScoped或CustomScoped註釋之一聲明的。如果省略範圍註釋,則必須像處理RequestScoped註釋那樣處理bean。

這同樣適用於CDI豆的EJB,JPA實體類,等等。所以,我看把類型@ManagedBean(name = "myBean") public class MyBean是明確重複生成的名稱管理bean的無論是對自己的行的唯一原因,或者對於沒有經驗的觀衆。

還值得注意的是,開發者往往不是簡單的命名該類的名稱,而是指向一些明確的簡短自我解釋的名稱,如下面的行:@ManagedBean(name = "settings") public class UserDefinedSettingsBean

+0

@Named也可以用作限定符,但我認爲這樣的解決方案非常難看 –

相關問題