java-CDI世界中@Value的等效项是什么?
作者:互联网
从属性占位符向CDI bean中注入属性值的方式是什么?
在春季一中写道:
@org.springframework.beans.factory.annotation.Value("${webservice.user}")
private String webserviceUser;
是什么将webserviceUser字段从属性文件/属性占位符设置为属性webservice.user.
如何使用CDI做到这一点?我试图找到一些答案,但是找不到任何等效的答案.但是,人们写道,您可以在应用程序服务器上使用CDI作为Spring的替代品,并且该用例非常基础,因此肯定有一种简单的方法,但是不幸的是我找不到它.
解决方法:
CDI是有关Dependecy Injection和Context的规范,因此它没有开箱即用的配置.但它也提供了一种非常强大的扩展机制,该机制允许第三方项目添加新的可移植功能(即,可与所有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配置文档here.
标签:properties,dependency-injection,cdi,spring,java 来源: https://codeday.me/bug/20191030/1969337.html