CDI kullanın.
JSF 2.3 uyarınca, @ManagedBean
bir kaldırıldı . Ayrıca 1417 numaralı spesifikasyona bakın . Artık seçmek için bir neden yok olduğunu bu araçlar @ManagedBean
üzerinde @Named
. Bu ilk olarak Mojarra 2.3.0 beta sürümü m06'da uygulandı.
Tarih
Temel fark, @ManagedBean
JSF çerçevesi tarafından yönetilir ve yalnızca @ManagedProperty
başka bir JSF tarafından yönetilen çekirdekler aracılığıyla kullanılabilir. @Named
CDI çerçeve ile uygulama sunucusu (konteyner) tarafından idare edilmekte ve yoluyladır olduğu @Inject
gibi bir kap yönetilen dışlayıcı her türlü uygun @WebListener
, @WebFilter
, @WebServlet
, @Path
, @Stateless
, vb ve hatta JSF @ManagedBean
. Diğer taraftan, @ManagedProperty
yok değil bir içinde çalışma @Named
ya da başka bir kap yönetilen eser. Gerçekten sadece içeride çalışıyor @ManagedBean
.
Diğer bir fark da, CDI'nın istek başına / iş parçacığı temelinde hedef kapsamdaki geçerli örneğe delege eden proxy'leri gerçekten enjekte etmesidir (EJB'lerin nasıl enjekte edildiği gibi). Bu mekanizma, JSF ile mümkün olmayan, daha geniş kapsamdaki bir fasulyeye daha dar kapsamdaki bir fasulyenin enjekte edilmesine izin verir @ManagedProperty
. JSF, burada fiziksel örneği doğrudan bir ayarlayıcıyı çağırarak "enjekte eder" (bu da tam olarak bir ayarlayıcıya ihtiyaç duyulduğu halde bununla birlikte gerekli değildir@Inject
).
Doğrudan bir dezavantaj olmasa da - başka yollar da vardır - kapsamı @ManagedBean
sınırlıdır. Diğer bir bakış açısıyla, "çok fazla" ifşa etmek istemiyorsanız @Inject
, yönettiğiniz fasulyeleri de saklayabilirsiniz @ManagedBean
. protected
Karşı gibi public
. Ama bu gerçekten sayılmaz.
En azından JSF 2.0 / 2.1'de, JSF destek çekirdeklerini CDI tarafından yönetmenin en büyük dezavantajı, CDI eşdeğeri olmamasıdır @ViewScoped
. @ConversationScoped
Yakın gelir, ama yine de el başlatma ve durdurma gerektirir ve çirkin ekler cid
sonuç URL'lerin istek parametresini. MyFaces CODI, JSF'leri CDI'ya tamamen şeffaf bir şekilde köprüleyerek işi kolaylaştırır, javax.faces.bean.ViewScoped
böylece bunu yapabilirsiniz @Named @ViewScoped
, ancak bu windowId
, sonuç URL'lerine, ayrıca düz vanilya sayfadan sayfaya gezinmeye çirkin bir istek parametresi ekler . OmniFaces , tüm bunları @ViewScoped
, fasulyenin kapsamını rastgele bir istek parametresi yerine JSF görünüm durumuna gerçekten bağlayan gerçek bir CDI ile çözer .
JSF 2.2 (bu soru / cevaptan 3 yıl sonra piyasaya sürülür) @ViewScoped
, kutusundan yeni bir tam CDI uyumlu açıklama sunar javax.faces.view.ViewScoped
. JSF 2.2 , eşdeğeri @FlowScoped
olmayan yalnızca bir CDI ile birlikte gelir ve böylece @ManagedBean
JSF kullanıcılarını CDI'ya doğru iter. Beklenti şudur @ManagedBean
ve arkadaşlar Java EE 8 uyarınca kullanımdan kaldırılacaktır. Halen kullanıyorsanız @ManagedBean
, gelecekteki yükseltme yollarına hazırlıklı olmak için CDI'ya geçmeniz şiddetle tavsiye edilir. CDI, WildFly, TomEE ve GlassFish gibi Java EE Web Profili ile uyumlu kaplarda kolayca bulunur. Tomcat için, aynen JSF için yaptığınız gibi, ayrı olarak yüklemeniz gerekir. Ayrıca Tomcat'e CDI nasıl kurulur?