CDI 是关于依赖注入和上下文的规范,因此它没有开箱即用的配置。但它也提供了一个非常强大的扩展机制,允许第三方项目添加新的可移植特性(即与所有 CDI 实现一起工作并且不依赖于服务器)。提供 CDI 扩展的最重要的项目是Apache Deltaspike和好消息,它提供了您所需要的。
所以你需要在你的项目中添加 deltaspike-core。如果您使用 Maven,则需要将此依赖项添加到您的 pom.xml
<dependency>
<groupId>org.apache.deltaspike.core</groupId>
<artifactId>deltaspike-core-api</artifactId>
<version>0.4</version>
</dependency>
<dependency>
<groupId>org.apache.deltaspike.core</groupId>
<artifactId>deltaspike-core-impl</artifactId>
<version>0.4</version>
</dependency>
之后,如果您不关心您的属性文件名,只需添加META-INF/apache-deltaspike.properties
到您的项目并将您的属性放入其中。如果您需要多个文件或想要选择名称,则必须PropertyFileConfig
为每个文件实现接口,如下所示:
public class MyCustomPropertyFileConfig implements PropertyFileConfig
{
@Override
public String getPropertyFileName()
{
return "myconfig.properties";
}
}
之后,您将能够注入这样的值
@ApplicationScoped
public class SomeRandomService
{
@Inject
@ConfigProperty(name = "endpoint.poll.interval")
private Integer pollInterval;
@Inject
@ConfigProperty(name = "endpoint.poll.servername")
private String pollUrl;
...
}
正如您在取自 Deltaspike 文档的示例中看到的那样,您可以在 String 中注入您的值,也可以在 Integer、Long、Float、Boolean 字段中注入您的值。如果您需要更具体的内容,您可以提供自己的类型。Deltaspike 配置文档可以在这里找到。