java - Spring @value 未设置属性

标签 java spring spring-boot

我有一个类,我想从属性文件中设置它的参数之一:

import org.springframework.beans.factory.annotation.Value;
(..)
@Getter
@Setter
@NoArgsConstructor
public class ConvertNonStandardOfferRequestDtoWrapper {
    private ConvertNonStandardOfferRequestDto convertNonStandardOfferRequestDto;

    @Value("true")
    private boolean documentPrintoutsRequired;

    public ConvertNonStandardOfferRequestDtoWrapper(ConvertNonStandardOfferRequestDto convertNonStandardOfferRequestDto) {
        this.convertNonStandardOfferRequestDto = convertNonStandardOfferRequestDto;
    }
}

我在构造函数中看到的是 documentPrintoutsRequiredfalse 而不是 true。我在构造函数内调试和设置断点时看到了这一点。我有这个模块的 pom 文件:

    <modelVersion>4.0.0</modelVersion>    
    <parent>
        <groupId>x</groupId>
        <artifactId>policy</artifactId>
        <version>4.0-SNAPSHOT</version>
    </parent>

    <artifactId>policy-api</artifactId>

    <dependencies>
        <dependency>
            <groupId>x</groupId>
            <artifactId>common-api</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>${guava.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </dependency>
    </dependencies>
    <build>
        (...)
    </build>    
</project>

我想知道为什么 @value 不能正常工作?

最佳答案

我建议您对所有属性使用构造函数注入(inject),这样您将在构造期间看到注入(inject)的@Value。

此外类必须是 Spring bean,因此添加 @Component 注解:

@Component
@Getter
@Setter
@NoArgsConstructor
public class ConvertNonStandardOfferRequestDtoWrapper {
    private ConvertNonStandardOfferRequestDto convertNonStandardOfferRequestDto;

    private boolean documentPrintoutsRequired;

    public ConvertNonStandardOfferRequestDtoWrapper(ConvertNonStandardOfferRequestDto convertNonStandardOfferRequestDto, 
                                                    @Value("${yourproperty}") boolean documentPrintoutsRequired) {
        this.convertNonStandardOfferRequestDto = convertNonStandardOfferRequestDto;
        this.documentPrintoutsRequired = documentPrintoutsRequired;
    }
}

关于java - Spring @value 未设置属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53833758/

相关文章:

java - tomcat 中的 HttpServletRequestWrapper 和 Filter 生命周期

java - 更快地获取大目录内容(java.io.File 替代品)

java - 数据库与spring roo的关系

使用 Arquillian 进行 Java 集成测试、数据库清理

java - 如何将 WebSocketMessageBrokerConfigurer 与应用程序的其余部分提取到单独的包中

java - Spring MVC : How to read and change a @PathVariable value

java - 迁移到 Spring Boot 后 ProcessBuilder 找不到可执行文件

spring-boot - 使用spring boot,它如何检测JTA环境?

java - Swagger OpenApi/看不到我的枚举属性

java - 面向对象程序设计问题