在许多情况下,您可能希望拥有一个以上版本的Bean,并将其用于不同的目的。 备用bean的典型理由是出于测试目的,其中备用bean提供模拟数据。 为了获得实时数据,“真实” bean必须连接到的实时系统的好处是远程,或者在测试场景中使用该时间太耗时。 因此,提供了提供静态数据的模拟bean。

在本文中,我将建立一个示例,为购物车提供一个模拟价格清单bean。

如何设置替代的Bean实现

实际和替代bean必须实现相同的接口。 在此示例中,它们实现了PriceList接口。

public interface PriceList {String priceList();
}
public class LivePriceList implements PriceList {public String priceList() {// connect to price list webservice or databasereturn "Live Price List";}
}

@Alternative注释替代bean,以将其标识为替代实现。

@Alternative
public class MockPriceList implements PriceList {public String priceList() {// use hard code prices for testingreturn "Mock Price List";}
}

可以使用接口作为类型注入PriceList bean。

public class ShoppingCart {@Injectprivate PriceList priceList;public String ObtainPriceList(){return priceList.priceList();}}

在此示例中,实际的PriceList bean在部署时将由CDI注入到ShoppingCart中。

使用替代豆

要使用替代豆你必须标明的价目表豆使用的心愿在beans.xml的文件中使用的版本。

<beans ...><alternatives><class>com.readlearncode.alternatives.MockPriceList</class></alternatives></beans>

指定了备用bean的全限定名。

结论

部署应用程序后,CDI容器会将备用MockPriceList注入ShoppingCart bean。

源代码

该示例的源代码可以在ReadLearnCode GitHub存储库中找到。

翻译自: https://www.javacodegeeks.com/2018/01/using-alternative-cdi-application.html

在CDI应用程序中使用@Alternative相关推荐

  1. php cdi_Swing应用程序中的CDI事件将UI和事件处理分离

    php cdi 在愉快地围绕CDI构建我的代码几年之后,使用它根据众所周知的模式来构造我的代码非常自然. CDI是一种旨在在Java EE应用程序服务器中使用的依赖项注入机制,这可能被视为不利. 但是 ...

  2. Swing应用程序中的CDI事件可将UI与事件处理分离

    在享受了几年围绕CDI构建我的代码的乐趣之后,使用它根据众所周知的模式来构造我的代码非常自然. CDI是一种旨在在Java EE应用程序服务器中使用的依赖项注入机制,这可能被视为不利. 但是,我想证明 ...

  3. 在J2SE应用程序中模拟CDI的会话和请求范围

    我们目前正在考虑将Naked Objects框架重构为使用JSR-330(依赖注入)和面向EE的老大哥JSR-299(CDI). 使用香草JSR-330是不费吹灰之力的,但是我们想利用JSR-299中 ...

  4. HOW-TO:具有MySQL的JEE应用程序中具有集群功能的Quartz Scheduler

    Quartz Scheduler是Java世界中最流行的调度库之一. 过去,我主要在Spring应用程序中使用Quartz. 最近,我一直在研究要在云中部署的JBoss 7.1.1上运行的JEE 6应 ...

  5. vaadin_Vaadin应用程序中的EJB查找

    vaadin 自从我实现上一个服务定位器以来已经有很长时间了. 考虑到Java EE CDI (上下文和依赖注入)的成熟度,我认为不再需要. 我的第一个实现是在基于Struts的Web应用程序中使用E ...

  6. HOW-TO:带有MySQL的JEE应用程序中具有集群功能的Quartz Scheduler

    Quartz Scheduler是Java世界中最流行的调度库之一. 过去,我主要在Spring应用程序中使用Quartz. 最近,我一直在研究将在云中部署的JBoss 7.1.1上运行的JEE 6应 ...

  7. Vaadin应用程序中的EJB查找

    自从我实现上一个服务定位器以来已经有很长时间了. 我认为不再需要考虑Java EE CDI (上下文和依赖注入)的成熟度. 我的第一个实现是在基于Struts的Web应用程序中使用EJB. 之后,我开 ...

  8. ios集成firebase_如何使用Firebase将Google Login集成到Ionic应用程序中

    ios集成firebase by Ryan Gordon 通过瑞安·戈登(Ryan Gordon) 如何使用Firebase将Google Login集成到Ionic应用程序中 (How to int ...

  9. [转载] java避免空指针异常_第1部分:在现代Java应用程序中避免空指针异常

    参考链接: Java的instanceof及其应用 java避免空指针异常 空做与不做 (Null do's and don'ts) In the talk Null References: The ...

最新文章

  1. C++_泛型编程与标准库(八)
  2. IT培训“来offer”获得数千万融资
  3. webdriver中处理alert
  4. Django框架(11.Django中的通过模型类查询数据以及相关函数和条件)
  5. 优秀项目经理必备的8个要素
  6. poj 2486 树形dp
  7. 《软件项目管理(第二版)》第 2 章——项目准备和启动 重点部分总结
  8. 95-860-045-源码-定时器-InternalTimerService
  9. Robot Framework(十四) 扩展RobotFramework框架——创建测试库
  10. [Ext JS6]多类型设备开发
  11. startService()和bindService()区别
  12. Kubernetes Jobs - 运行处理任务指南
  13. matlab图像模糊处理
  14. hping 详解_hping3命令
  15. win的反义词_小学英语常见的英语单词反义词大汇总,一定要让孩子掌握!
  16. ubuntu 上 ESP8266 HomeKit 实战(四)1路继电器 + 1个触摸开关
  17. 多项式曲线拟合 c语言6,多项式曲线拟合
  18. python爬虫app步骤_Python爬虫抓取手机APP的传输数据,python爬虫抓取app
  19. 云计算技术体系结构由这四点组成
  20. OpenCV-Python | 图像的基本操作 十

热门文章

  1. 动态规划训练9 [Brackets POJ - 2955 ]
  2. Shell变量的初始值赋值
  3. 一步一步详解高斯日记
  4. 19级:班级日常分享 | 一天一瞬间
  5. 稀疏数组与二维数组相互转化
  6. centos7 切换中文输入法 无需安装
  7. 三国志战略版360区S4服务器合并信息,三国志战略版pk赛季怎么转区?s4转区规则[多图]...
  8. 车联网 python_利用百度车联网提供的天气查询接口用python查询天气信息
  9. (转)漫画:什么是分布式事务?
  10. 云服务器的优点和缺点_为什么要使用云计算? 的优点和缺点