编程语言
首页 > 编程语言> > java-CDI世界中@Value的等效项是什么?

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