【问题标题】:What is the equivalent of @Value in CDI world?CDI 世界中的@Value 等价物是什么?
【发布时间】:2013-07-22 03:04:03
【问题描述】:

将属性值从属性占位符注入 CDI bean 的方式是什么?

春天写一篇:

@org.springframework.beans.factory.annotation.Value("${webservice.user}")
private String webserviceUser;

从属性文件/属性占位符将webserviceUser 字段设置为属性webservice.user

如何使用 CDI 做到这一点?我试图找到一些答案,但我找不到任何等价物。但是,人们写道,您可以在应用程序服务器上使用 CDI 作为 Spring 替代品,并且该用例非常基础,所以肯定有一个简单的方法,不幸的是我没有找到它。

【问题讨论】:

  • 你能用@Inject 试试吗?
  • 没有直接的替代方案,但是您可以尝试实现here
  • @DmitryKuskov Thaks,我会看看那个,但如果你必须从头开始编写最基本的东西,我认为 CDI 完全替代 Spring 的说法被高度夸大了。如果在 EAR 大小上节省几 MB 是值得的,我必须咨询 PM。
  • 我很好奇,你从哪里读到 CDI 完全替代了 spring?我认为它是 Spring 核心 IoC 的替代品,但您应该寻找像 DeltaSpike 这样的插件以获得更多功能。

标签: java spring properties dependency-injection cdi


【解决方案1】:

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 配置文档可以在 here 找到。

【讨论】:

    猜你喜欢
    • 2011-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-19
    • 2012-03-29
    • 2011-02-18
    相关资源
    最近更新 更多