从环境变量中注入值的最佳方法是什么?

时间:2014-10-28 12:41:02

标签: java java-ee cdi

考虑这个例子

@Stateless
public class UniqueIdGenerator {
    private static final String COLON = ":";
    private String serverPrivateKey;

    @SuppressWarnings("UnusedDeclaration")
    public UniqueIdGenerator() {
    }

    @Inject
    public UniqueIdGenerator(@Nonnull final String serverPrivateKey) {
        this.serverPrivateKey = serverPrivateKey;
    }
    ...
}

我希望@Inject基于不同环境中可用的环境变量serverPrivateKey的值。

在这里注射它的最佳方法是什么?

3 个答案:

答案 0 :(得分:3)

要从环境中注入值,而不是编写自己的生成器方法,您可能需要查看Apache DeltaSpike的Configuration API

使用@ConfigProperty限定符,可以从许多不同的属性源中注入值,例如系统属性,环境变量或JNDI。

示例:

@Inject
@ConfigProperty(name = "SERVER_PRIVATE_KEY")
private String serverPrivateKey;

答案 1 :(得分:1)

我们使用以下模式:有一个bean可以为我们提供所需的价值。 bean知道如何获取值(环境,系统属性,等等)。为了使以后更容易,bean的类型应该是一个接口(在你的情况下可能是IPrivateKeyProvider)。

然后创建UniqueIdGenerator并注入第一个bean。然后,设置决定这将是哪个bean(某种模拟测试和生产代码的实际实现)。

答案 2 :(得分:0)

您必须使用生产者方法:

根据related oracle documentation

  

生成器方法生成一个可以注入的对象。通常,您使用生产者   以下情况中的方法:

     
      
  • [...]
  •   
  • 当要注入的对象的具体类型可能在运行时发生变化时
  •   

查看示例here