每个人都知道JSF 2中热切的托管bean。@ ManagedBean具有eager属性。 如果eager ='true'并且范围是application,那么必须在应用程序启动时而不是在第一次引用该bean时创建此bean。 当您要在应用程序启动期间加载应用程序范围的数据(例如,菜单的某些选择项)以提高运行时的性能时,这是一个很好的功能。

@ManagedBean(eager=true)
@ApplicationScoped
public class GlobalBean {...
}

@ManagedBean批注将在JSF 2.2中弃用。 强烈建议在JEE环境中使用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();}}
}

扩展应该在文件META-INF / services / javax.enterprise.inject.spi.Extension中注册。 该文件只有一行带有EagerExtension类的完全限定路径,例如mydomain.mypackage.EagerExtension。 使用很简单。 假设,我们有一个应用程序范围的LayoutController CDI bean,它负责整个布局配置。 我们可以使用@Eager对其进行注释,并加快布局的创建。

@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在软件开发博客上的想法中 渴望CDI bean 。

翻译自: https://www.javacodegeeks.com/2013/02/jsf-eager-cdi-beans.html

JSF –渴望的CDI bean相关推荐

  1. jsf绑定bean_JSF –渴望的CDI bean

    jsf绑定bean 每个人都知道JSF 2中热切的托管bean.@ ManagedBean具有eager属性. 如果eager ='true'并且范围是application,那么必须在应用程序启动时 ...

  2. java ee cdi_Java EE CDI bean范围

    java ee cdi Java EE平台的上下文和依赖注入(CDI)是一项功能,有助于将Java EE平台的Web层和事务层绑定在一起. CDI是一组服务,可以一起使用,使开发人员可以轻松地在Web ...

  3. Java EE CDI bean范围

    Java EE平台的上下文和依赖注入(CDI)是一项功能,可帮助将Java EE平台的Web层和事务层绑定在一起. CDI是一组服务,可以一起使用,使开发人员可以轻松地在Web应用程序中使用企业bea ...

  4. jpa 忽略bean_在WildFly上将JPA和CDI Bean与骆驼一起使用

    jpa 忽略bean 我并没有真正为此计划,但是在一个免费的会议月份中,我有机会进行了一些深入的探讨,并向您展示了WildFly-Camel子系统提供的WildFly魔术上的更多Camel. 商业背景 ...

  5. 在WildFly上将JPA和CDI Bean与骆驼一起使用

    我并没有真正为此计划,但是在一个免费的会议月份中,我有机会进行了一些深入的探讨,并向您展示了WildFly-Camel子系统提供的WildFly魔术上的更多Camel. 商业背景 该演示来自Chris ...

  6. JSF学习笔记-Managed Bean

    在书上看到些东西,觉得可以保存在博客里,结果在网上一搜,已经有人这么做了,那我就省省打字这点事吧. JSF使用 JavaBean 来达到程序逻辑与视图分离的目的,在JSF中的Bean其角色是属于Bac ...

  7. CDI——给bean取名字

    参考: CDI技术第十步 给Bean取名字 @Named 这里研究的是javax.inject.Named 包下的 @Named 还是拿之前写的项目为例: 页面的显示 <p:dataList v ...

  8. IntelliJ IDEA 2014 付费版 免费版比较

    http://www.jetbrains.com/idea/features/editions_comparison_matrix.html Freemarker, Velocity IDE Feat ...

  9. jsf教程_JSF范围教程– JSF / CDI会话范围

    jsf教程 会话作用域跨越多个HTTP请求-响应周期(理论上是无限的). 当您需要每个HTTP请求-响应周期进行一次交互时,请求作用域在任何Web应用程序中都非常有用. 但是,当您需要对属于用户会话的 ...

最新文章

  1. 服务器搭建虚拟win云服务,云服务器创建win10虚拟机
  2. Scrum团队选择scrum看板工具的7点特征
  3. Android依赖注入:Google Guice on Android的使用及相关资源
  4. java 运算符_java 运算符
  5. 妈妈再也不用担心孩子偷玩手机了!微信升级“青少年模式”
  6. 从gb2py.idx中获取一个汉字的拼音首字母
  7. JavaScript数据类型之Undefined、Null、Boolean
  8. html5数学公式编辑器,数学公式编辑器的使用技巧
  9. ASP.NET Core使用Session
  10. Zmodem协议工作原理
  11. 基于SSM车牌识别停车场管理系统
  12. Insyde uefi 隐藏设置_固件级安全,微软安全工具新增UEFI扫描功能
  13. Skippr – 轻量、快速的 jQuery 幻灯片插件
  14. 全面了解风控指标体系
  15. 变量的定义以及数据类型
  16. matlab做胶州湾地图,惊了,青岛也有了五环地图,快来看你家在几环?
  17. 记录 vue-admin-template 中 npm install 错误解决办法
  18. 论文阅读(21 AAAI)Mind-the-Gap Unsupervised Domain Adaptation for Text-Video Retrieval
  19. 纠正你读错的电脑英文词汇--(2)
  20. 通过WiFi进行adb调试(免去数据线烦扰)

热门文章

  1. 二级MYSQL的语法整理_MySQL语法整理
  2. hash地址_一致性Hash在负载均衡中的应用
  3. 阿帕奇跨域_阿帕奇光束
  4. apache ignite_使用Spring Data的Apache Ignite
  5. lucene 查询示例_Lucene查询(搜索)语法示例
  6. drill apache_如何使用Apache Drill分析高度动态的数据集
  7. Apache Kafka消费者再平衡
  8. javafx swing_JavaFX技巧9:请勿混用Swing / JavaFX
  9. apache flume_Flume:使用Apache Flume收集客户产品搜索点击数据
  10. Eclipse GlassFish 5.1就在这里!