在Java中编写属性文件?

发布者    |       CDI Weld

我刚刚注意到CDI使得在Java中编写属性文件成为可能,而不是纯文本。我不确定这是否有用,但它真的很可爱。

我们在一个类中定义我们的属性。当然,由于属性将具有特定的部署,我们应该声明这个类@Alternative。 (除非它包含默认值,我想。)

@Alternative 
class TestSettings {
   @Produces @Named String adminUser = "admin";
   @Produces @Named String adminPassword = "nimda";
   @Produces @Named int maxRetries = 100;
}

现在,我们可以注入这些属性。到字段

@Inject @Named int maxRetries;

甚至到构造函数或方法

@Inject 
Connection(@Named("adminUser") String user, 
           @Named("adminPassword") String pass) { 
   ... 
}

要选择适合部署的正确设置类,我们将其列入beans.xml:

<beans>
   <alternatives>
      <class>settings.TestSettings</class>
   </alternatives>
</beans>

你甚至可以编写一个简单的可移植扩展,将必要的@Alternative, @Produces@Named注解织入到以下类中

@Properties 
class TestSettings {
   String adminUser = "admin";
   String adminPassword = "nimda";
   int maxRetries = 100;
}

(如果你想了解如何做,请阅读有关ProcessAnnotatedType事件的CDI可移植扩展SPI。)

好吧,我想创建一个Settings接口,为所有属性提供getter方法,并注入该接口会更安全。尽管如此,对于这样一个“意外”的特性,这真的很酷。

更新:嗯……当你意识到TestSettings也是一个声明所有您的部署特定资源


返回顶部