javascript
JSF –渴望的CDI bean
每個人都知道JSF 2中熱切的托管bean。@ ManagedBean具有eager屬性。 如果eager ='true'并且范圍是application,那么必須在應(yīng)用程序啟動時而不是在第一次引用該bean時創(chuàng)建此bean。 當您要在應(yīng)用程序啟動期間加載應(yīng)用程序范圍的數(shù)據(jù)(例如,菜單的某些選擇項)以提高運行時的性能時,這是一個很好的功能。
@ManagedBean批注將在JSF 2.2中棄用。 強烈建議在JEE環(huán)境中使用CDI(上下文依賴注入)bean。 但是,與CDI中急切管理的bean等效呢? 好吧,CDI非常靈活,您可以編寫可移植的CDI擴展 。 我問托馬斯·安德拉奇科(Thomas Andraschko)該怎么做。 Thomas是一位CDI專家,是PrimeFaces Extensions的共同所有者,也是OpenWebBeans(OWB)項目的提交者。 他的提示是實施如下擴展:
@Qualifier @Retention(RetentionPolicy.RUNTIME) @Target({TYPE}) public @interface Eager { }package mydomain.mypackage;import java.util.ArrayList; import java.util.List; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.event.Observes; import javax.enterprise.inject.spi.AfterDeploymentValidation; import javax.enterprise.inject.spi.Bean; import javax.enterprise.inject.spi.BeanManager; import javax.enterprise.inject.spi.Extension; import javax.enterprise.inject.spi.ProcessBean;public class EagerExtension implements Extension {private List<Bean<?>> eagerBeansList = new ArrayList<Bean<?>>();public <T> void collect(@Observes ProcessBean<T> event) {if (event.getAnnotated().isAnnotationPresent(Eager.class)&& event.getAnnotated().isAnnotationPresent(ApplicationScoped.class)) {eagerBeansList.add(event.getBean());}}public void load(@Observes AfterDeploymentValidation event, BeanManager beanManager) {for (Bean<?> bean : eagerBeansList) {// note: toString() is important to instantiate the beanbeanManager.getReference(bean, bean.getBeanClass(), beanManager.createCreationalContext(bean)).toString();}} }擴展應(yīng)該在文件META-INF / services / javax.enterprise.inject.spi.Extension中注冊。 該文件只有一行帶有EagerExtension類的完全限定路徑,例如mydomain.mypackage.EagerExtension。 使用很簡單。 假設(shè),我們有一個應(yīng)用程序范圍的LayoutController CDI bean,它負責整個布局配置。 我們可以使用@Eager對其進行注釋,并加快布局的創(chuàng)建。
@ApplicationScoped @Eager @Named public class LayoutController implements Serializable {private LayoutOptions layoutOptions;@PostConstructprotected void initialize() {layoutOptions = new LayoutOptions();LayoutOptions panes = new LayoutOptions();panes.addOption('slidable', false);panes.addOption('spacing', 6);layoutOptions.setPanesOptions(panes);...}public LayoutOptions getLayoutOptions() {return layoutOptions;} } 享受CDI的樂趣!
參考: JSF –我們的JCG合作伙伴 Oleg Varaksin在軟件開發(fā)博客上的想法中 渴望CDI bean 。
翻譯自: https://www.javacodegeeks.com/2013/02/jsf-eager-cdi-beans.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的JSF –渴望的CDI bean的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 彩色电脑简约壁纸(彩色电脑简约壁纸图片)
- 下一篇: 您好GroovyFX