php cdi_使用CDI的InjectionPoint注入配置值

php cdi

依赖注入是用于组织类依赖的一项出色技术。 当前类中需要的所有类实例都是在运行时从DI容器提供的。 但是您的配置呢?

当然,您可以创建一个“ Configuration”类,并在需要它的任何地方注入该类,并从中获取必要的值。 但是CDI允许您使用InjectionPoint概念更细致地做到这一点。

如果编写@Produces方法,则可以让您的CDI容器也注入一些有关当前代码的信息,新创建/产生的值将注入到这些信息中。 可在此处找到可用方法的完整列表。 有趣的一点是,您可以查询此类以获取当前注入点具有的所有注释:

Annotated annotated = injectionPoint.getAnnotated();
ConfigurationValue annotation = annotated.getAnnotation(ConfigurationValue.class);

如上面的示例代码所示,我们可以引入一个简单的@Qualifier批注,该批注标记所有需要特定配置值的注入点。 在此博客文章中,我们只想使用字符串作为配置值,但是整个概念当然也可以扩展到其他数据类型。 已经提到的@Qualifier批注如下所示:

@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @interface ConfigurationValue {@Nonbinding ConfigurationKey key();
}public enum ConfigurationKey {DefaultDirectory, Version, BuildTimestamp, Producer
}

注释当然具有保留策略RUNTIME,因为CDI容器必须在应用程序运行时对其进行评估。 它可以用于字段和方法。 除此之外,我们还创建了一个键属性,该属性由枚举ConfigurationKey支持。 在这里,我们可以介绍所需的所有配置值。 在我们的示例中,这是默认目录,程序版本等的配置值。 我们将此属性标记为@Nonbinding,以防止CDI容器使用此属性的值来选择正确的生产者方法。 如果我们不使用@Nonbinding,则必须为枚举的每个值编写一个@Produces方法。 但是这里我们要用一种方法来处理所有这一切。

下面的代码示例显示了@Produces方法,用于使用@ConfigurationKey注释的字符串:

@Produces
@ConfigurationValue(key=ConfigurationKey.Producer)
public String produceConfigurationValue(InjectionPoint injectionPoint) {Annotated annotated = injectionPoint.getAnnotated();ConfigurationValue annotation = annotated.getAnnotation(ConfigurationValue.class);if (annotation != null) {ConfigurationKey key = annotation.key();if (key != null) {switch (key) {case DefaultDirectory:return System.getProperty("user.dir");case Version:return JB5n.createInstance(Configuration.class).version();case BuildTimestamp:return JB5n.createInstance(Configuration.class).timestamp();}}}throw new IllegalStateException("No key for injection point: " + injectionPoint);
}

@Produces方法获取注入的InjectionPoint作为参数,以便我们可以检查其值。 由于我们对注入点的注释感兴趣,因此我们来看看当前注入点是否使用@ConfigurationValue进行注释。 如果是这种情况,我们看看@ConfigurationValue的key属性并确定我们返回哪个值。 而已。 当然,在更复杂的应用程序中,我们可以从一些文件或某种其他类型的数据存储中加载配置。 但是概念保持不变。

现在,我们可以轻松地使用以下两行代码来让CDI容器注入所需的配置值:

@Inject @ConfigurationValue(key = ConfigurationKey.DefaultDirectory)private String defaultDirectory;

结论 :在整个应用程序中访问一组配置值从未如此简单。

参考:在Martin's Developer World博客上, 使用我们的JCG合作伙伴 Martin Mois 使用CDI的InjectionPoint注入配置值 。

翻译自: https://www.javacodegeeks.com/2014/02/injecting-configuration-values-using-cdis-injectionpoint.html

php cdi

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/343461.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 5.7 pxc_mysql5.7 PXC安装记录

环境信息172.31.217.182 bd-dev-mingshuo-182172.31.217.183 bd-dev-mingshuo-183172.31.217.89 bd-dev-vertica-89依赖关系1.安装Percona-XtraBackup(依赖libev-4.03-3.el6.x86_64.rpm)2.yum install -y git scons gcc gcc-c openssl check cmake bison boost-devel asio-…

【渝粤教育】国家开放大学2018年春季 0529-21T高级英语阅读(1) 参考试题

科目编号:0529 座位号: 四川电大2017─2018学年度第二学期期末考试 高级英语阅读(1)试题 (开卷) 2018年7月 注 意 事 项 一、 将你的准考证号、学生证号、姓名及分校(工作站)名称填写…

【渝粤教育】国家开放大学2018年春季 0599-21T工程造价管理基础理论与相关法规 参考试题

科目编号:0599 座位号 2017-2018学年度第二学期期末考试 工程造价管理基础理论与相关法规 试题 2018年 7 月 一、单选题(本大题共10小题,每小题4分,共计40分) (★请考生务必将答案填入到下面对应序号的答题…

旧访客设计模式的新生活

介绍 访客 [1、2]是众所周知的经典设计模式。 有很多资源对其进行了详细说明。 在不深入研究实现的情况下,我将简要提醒一下该模式的概念,解释其优点和缺点,并提出一些可以使用Java编程语言轻松应用于其的改进。 古典游客 [Visitor] 允许在运…

一台PoE工业交换机可以给多少设备供电?

在安防监控领域,现在使用的很多网络设备都支持PoE供电,在网络监控施工中,为了减少布线成本以及更加方便快捷,绝大多数工程商会考虑采用PoE供电,即采用PoE交换机给监控摄像头供电。那么,一台PoE工业交换机可以给多少设备…

oracle不维护java_宣布 Java 8 停止维护后,Oracle 又毙掉了 JavaOne!

2019 年 1 月之后,Oracle 将不会在网站上发布 Java SE 8 商业使用的更新下载。如需持续获取安全的 bug 修复和安全补丁以及 Java SE 8 或以前版本的稳定性支持,可以通过 Oracle Java SE 高级版,Oracle Java SE 高级桌面,或 Oracle…

【渝粤教育】国家开放大学2018年春季 0674-22T财务管理 参考试题

科目编号:[0674] 座位号 2017-2018学年度第二学期期末考试 财务管理 试题 2018年 7 月 一、单选题(本大题共10小题,每小题3分,共计30分) (★请考生务必将答案填入到下面对应序号的答题框中★) …

【渝粤教育】国家开放大学2018年春季 0699-22T阅读与写作 参考试题

试卷代码:0699 2017-2018学年第2学期期末考试 阅读与写作 (闭卷) 2018年5月 一、阅读以下文章,并回答问题。(共40分) 雁南飞 胡 同 ①春天来了,小燕子乘着南风伴着细雨再一次回到了北方的那个屋檐下。看着它们忙忙碌…

python dict初始化大小_在Python中初始化/创建/填充Dict的Dict

我必须在为我的研究编写代码时经常这样做。您将希望使用defaultdict包,因为它允许您添加键:值对在任何级别上,通过简单的分配。回答完你的问题我会给你看的。这是直接来源于我的一个程序。关注最后4行(不是注释)并在块的其余部分跟踪变量&…

q7goodies事例_Java 8 Friday Goodies:本地交易范围

q7goodies事例在Data Geekery ,我们喜欢Java。 而且,由于我们真的很喜欢jOOQ的流畅的API和查询DSL ,我们对Java 8将为我们的生态系统带来什么感到非常兴奋。 我们已经写了一些关于Java 8好东西的博客 ,现在我们觉得是时候开始一个…

以太网交换机和路由器的区别,二者有共同点吗?

您知道以太网交换机和路由器有什么不同吗?在osi七层模型上来分析,交换机在第二层工作,路由器在第三层上工作。交换机查找某一台电脑的方式是通过查找mac地址,就是通过您网卡上固有的一个唯一识别编号来进行查找的。路由器查找一台…

【渝粤教育】国家开放大学2018年春季 3780-22T燃气设备操作与维护 参考试题

科目编号:3780 座位号 2017-2018学年度第二学期期末考试 燃气设备操作与维护 试题 2018年 7 月 一、判断题(本大题共10小题,每题2分,共计20分) 1.绝对压力低于大气压力时,用真空表测的的压力称…

【渝粤教育】国家开放大学2018年春季 7067-21T康复护理学 参考试题

编号:7067 座位号 2017~2018学年度第二学期期末考试 康复护理学试题 2018年07月 一、名词解释(4小题,每题5分,共20分) 康复护理学 神经系统的可塑性 代谢当量 小脑性共济失调步态 二、填空 &#xff…

工业以太网交换机有多少个快速以太网接口?

工业以太网交换机应用于复杂的工业环境中实时以太网数据传输,以太网交换机是非常的重要,它把握着一个网络的命脉,有人会提出以太网交换机有多少个快速以太网接口?到底该如何进行选择呢?接下来我们就跟随飞畅科技的小编…

git粘贴命令行_如何使用git检测复制和粘贴代码?

我只是再次阅读 git-blame手册页,注意到这部分:A particularly useful way is to see if an added file has lines created by copy-and-paste from existing files. Sometimes this indicates that the developer was being sloppy and did not refactor the code …

有关Spring缓存性能的更多信息

这是我们最后一篇关于Spring的缓存抽象的文章的后续文章 。 作为工程师,您可以通过了解所使用的某些工具的内部知识来获得宝贵的经验。 了解工具的行为有助于您在做出设计选择时变得更加成熟。 在这篇文章中,我们描述了一个基准测试实验和结果&#xff…

【渝粤教育】国家开放大学2018年春季 7394-22T政府公共关系 参考试题

试卷编号:7394 座位号 2017——2018学年度第二学期期末考试 政府公共关系试题 2018年7月 一、单选题(每空2分,共30分) 政府公共关系以塑造良好形象和获得公众支持为( ) 。 A. 途径 B. 主体 C. 客体 D. 目标政府公共关系客体的复…

【渝粤教育】国家开放大学2018年春季 8126-21T制药工程 参考试题

编号:8126 座位号 2017~2018学年度第二学期期末考试 制药工程试题 2018年5月 一、名词解释(本大题共4小题,每题5分,共20分)。 生物技术药物 干燥 天然药物 制药工程设计 二、单项选择题(本…

PoE交换机如何才能稳定连接和安全使用?

随着PoE技术的不断发展,PoE交换机目前已经处于非常成熟的阶段,但是由于目前监控市场迫于成本的压力,选用的PoE交换机或者线材品质过于低劣,或者方案设计本身不合理,就会导致采用PoE供电的项目维护的工作量特别大&#…

java判断是否第一次出现_利用java判断字符首次出现的位置,java替换最后一个特定字符...

利用java判断字符首次出现的位置利用爪哇判断字符首次出现的位置,目的:(学习视频分享:java视频教程实现代码如下:导入Java。util。收藏品;导入Java。util。LinkedList导入Java。util。列表;导入Java。util。…