![](/img/trans.png)
[英]Using CDI (Context & Dependency Injection) backing beans instead of Managed Beans
[英]CDI beans injection
這是在@SessionScoped
bean中注入@ApplicationScoped
bean的正確方法嗎? 這會導致我的應用程序范圍的bean被存儲在每個用戶的會話中嗎?
我有一個應用程序范圍的Bean,其中包含我們在所有系統用戶之間共享的一些值,現在我需要在會話Bean的方法中獲取這些值。
像您提供的示例一樣,在JSF或CDI Bean中將相同或更大范圍的Bean注入另一個Bean中是完全合法和正確的。
CDI bean和JSF托管bean之間的區別在於,當您嘗試在另一個bean中注入范圍較窄的bean(例如,將@RequestScoped
bean注入@SessionScoped
一個)時,只有在使用CDI @Named
才有可能@Named
bean,但是在使用JSF @ManagedBean
時無法@Named
。
CDI bean之所以可以做到這一點,與它們的Proxy Pattern機制有關,與JSF機制相比(它基於調用設置程序以便直接注入物理實例)比JSF機制更靈活。
這種代理機制允許CDI容器將引用傳遞給代理,而不是傳遞注入的Bean(除非Bean具有默認范圍@Dependent
)。 因此,該代理將負責處理對注入的bean的所有調用,並將它們轉發/重定向到正確的bean實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.