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

php cdi_使用CDI的InjectionPoint注入配置值相关推荐

  1. 使用CDI的InjectionPoint注入配置值

    依赖注入是用于组织类依赖的一项出色技术. 当前类中需要的所有类实例都是在运行时从DI容器提供的. 但是您的配置呢? 当然,您可以创建一个" Configuration"类,并在需要 ...

  2. Java静态变量注入配置值,工具类使用@Value将信息注入到静态变量中

    在spring工程中,我们经常需要使用到配置文件的一些信息,在每个类中定义,可能导致这些信息变得零散.spring给我们提供了一个注解@Value(),使我们可以注入配置文件中的数据. bootstr ...

  3. bean注入属性_摆脱困境:将属性值注入配置Bean

    bean注入属性 Spring Framework对将从属性文件中找到的属性值注入到bean或@Configuration类中提供了很好的支持. 但是,如果将单个属性值注入这些类中,则会遇到一些问题. ...

  4. 摆脱困境:将属性值注入配置Bean

    Spring Framework对将从属性文件中找到的属性值注入到bean或@Configuration类中提供了很好的支持. 但是,如果将单个属性值注入这些类中,则会遇到一些问题. 这篇博客文章指出 ...

  5. Istio1.12.1 Sidecar注入配置

    1.istio-允许/禁用sidecar设置 1.1  在namespace设置自动注入: 给 zmc 命名空间设置标签:istio-injection=enabled: 1 2 3 4 5 6 7 ...

  6. springMVC通过spring.xml对属性注入bean值(工厂模式)

    springMVC通过spring.xml对属性注入bean值,该bean是一个map容器: <bean id="configXMLCreatorFactory" class ...

  7. 晕了!这个配置值从哪来的?

    如果有同事问你,数据库连接串的值和appsettings.json配的不一样,从哪来的?你能回答的出来吗? 配置读取顺序 ASP.NET Core 中的配置是使用一个或多个配置提供程序执行的,配置提供 ...

  8. @Value注解获取不到配置值

    1. 写在前面 碰到过三种情况导致@Value获取不到配置值 变量被关键字static修饰 类没有使用@Component及其衍生标签修饰 在Bean初始化时构造方法中引用被@Value修饰的变量 如 ...

  9. Spring中@Value注解获取不到配置值

    @Value注解必须要在spring的bean中才能使用,不能自己new一个对象调用 产生原因: 在SpringBoot中使用@Value只能给普通变量赋值,不能给静态变量赋值 解决方法: 给静态变量 ...

最新文章

  1. 融云任杰:强互动,RTC 下一个“爆点”场景 | 拟合
  2. 对原生AJAX和HTTP的理解
  3. SAP CRM OData multiple origin Composition的测试
  4. DOCKER - 容器抓包
  5. 假如古代有了云计算,延禧攻略里的各位嫔妃要如何宫斗
  6. java类继承语法_java类的继承(基础)
  7. linux 常用命令及操作
  8. chromebook刷_使用Chromebook编码
  9. 云图说|云数据库MySQL内核小版本升级全攻略
  10. HttpClient 4.3学习笔记
  11. C# ToString
  12. javascript animation lib greensock gsap介绍
  13. CISP 考试教材《第 4 章 知识域:业务连续性》知识整理
  14. 最全整理反面角色谁更适合饰演老大角色,你认识多少?(已收藏)
  15. 两年嵌入式软件开发的工作感想
  16. 最新PHP编程零基础入门项目实战教程(完整)
  17. TCP三次握手中SYN,ACK,Seq含义
  18. spark infer parquet schema
  19. 目标检测 YOLOv5 - 模型的样子
  20. 数据库标准语言SQL(六)——单表查询(二)

热门文章

  1. Normal Data Structure Tricks
  2. codeforces1435 D. Shurikens
  3. Codeforces Round #654 (Div. 2)
  4. 【DP】【四边形不等式】邮局(P4767)
  5. 【主席树】更为厉害(P3899)
  6. 洛谷-P3396 哈希冲突 分块
  7. Linux--用SecureCRT来上传和下载文件
  8. 漫画:删去k个数字后的最小值
  9. 同学们,看看这里吧!!!
  10. hibernate正向生成数据库表以及配置——Teacher.java