복붙노트

[SPRING] 속성 파일에서 값을 가져 와서 주석에 사용하는 방법?

SPRING

속성 파일에서 값을 가져 와서 주석에 사용하는 방법?

엔티티 클래스가 있습니다.

Class.java

@Entity
public class Class {
    @Id
    @GeneratedValue
    private Long id;

    @NotNull
    @Range(min = 0, max = 10)
    private double value;
}

@Range 주석에서 하드 코딩 된 값을 없애고 구성 파일에서로드하려고합니다.

constraints.properties

minVal=0
maxVal=10

이것이 제가 시도한 것입니다 :

@Component
@Entity
@PropertySource("classpath:/constraints.properties")
public class Class {

    @Value("${minVal}")
    private final long minValue;
    @Value("${maxVal}")
    private final long maxValue;

    @Id
    @GeneratedValue
    private Long id;

    @NotNull
    @Range(min = minValue, max = maxValue)
    private double value;
}

내가 얻는 오류는 속성 값이 일정해야합니다. 내가 원하는 결과를 얻기 위해 이러한 필드의 초기화가 어떻게 수행되어야합니까?

해결법

  1. ==============================

    1.첫 번째 : 최종 필드에 값을 주입하려면 생성자 주입을 사용해야합니다.이 질문을 참조하십시오.

    첫 번째 : 최종 필드에 값을 주입하려면 생성자 주입을 사용해야합니다.이 질문을 참조하십시오.

    즉, 알 수없는 값을 생성자에 전달합니다.

    값은 변경되지 않지만 컴파일러는 런타임에 결정되므로이 값을 알 수 없기 때문에 값이 일정하지 않습니다. 또한 컴파일 타임에 값을 결정할 수있는 주석의 값으로 만 표현식을 사용할 수 있습니다.

    단일 인스턴스가 아닌 클래스에 대해 어노테이션이 선언 되었기 때문에 그 예가 가능합니다. 예에서 변수의 값은 모든 인스턴스마다 다를 수 있습니다.

    그래서 저는 여러분이 성취하고자하는 것이 불가능하다고 말합니다.

  2. from https://stackoverflow.com/questions/33586968/how-to-import-value-from-properties-file-and-use-it-in-annotation by cc-by-sa and MIT license