복붙노트

[SPRING] 클래스 수준 변수에서 Spring @Value 주석을 사용하는 방법

SPRING

클래스 수준 변수에서 Spring @Value 주석을 사용하는 방법

클래스의 인스턴스 변수에 @Value로 삽입 된 매개 변수를 사용해야하고 모든 하위 클래스에서 해당 변수를 다시 사용할 수 있습니다.

   @Value(server.environment)
   public String environment;

   public String fileName = environment + "SomeFileName.xls";

여기서 문제는 fileName을 먼저 초기화 한 다음 환경 주입이 일어나고 있다는 것입니다. 그래서 나는 항상 null-SomeFileName.xls를 얻고있다.

어쨌든 봄에 첫 번째 @Value를 초기화하기 위해 전달해야합니다.

해결법

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

    1.그러므로 @PostConstruct를 사용할 수 있습니다. 문서에서 :

    그러므로 @PostConstruct를 사용할 수 있습니다. 문서에서 :

    @PostConstruct를 사용하면 속성을 설정 한 후에 수정 작업을 수행 할 수 있습니다. 한 가지 해결책은 다음과 같습니다.

    public class MyService {
    
        @Value("${myProperty}")
        private String propertyValue;
    
        @PostConstruct
        public void init() {
            this.propertyValue += "/SomeFileName.xls";
        }
    
    }
    

    또 다른 방법은 @Autowired config-method를 사용하는 것입니다. 문서에서 :

    예:

    public class MyService {
    
        private String propertyValue;
    
        @Autowired
        public void initProperty(@Value("${myProperty}") String propertyValue) {
            this.propertyValue = propertyValue + "/SomeFileName.xls";
        }
    
    }
    

    차이점은 두 번째 접근법에서는 빈에 대한 추가 후크가 없으므로 자동 채워지는대로 적용한다는 점입니다.

  2. ==============================

    2.@Value를 사용하여 성취하고자하는 것과 비슷한 소리를내는 특성 파일에서 값을 읽을 수 있습니다.

    @Value를 사용하여 성취하고자하는 것과 비슷한 소리를내는 특성 파일에서 값을 읽을 수 있습니다.

    xml 또는 bean 구성 메소드에서 PropertySourcesPlaceholderConfigurer를 구성하면 스프링으로 값이 설정됩니다.

    @Value("${server.env}")
    private String serverEnv;
    

    그리고 구성 ....

    @Configuration
    public class Cfg {
    @Bean
    public static PropertySourcesPlaceholderConfigurer properties() {
        final PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer = new PropertySourcesPlaceholderConfigurer();
        propertySourcesPlaceholderConfigurer.setLocation(new ClassPathResource("/foo.properties"));
        return propertySourcesPlaceholderConfigurer;
        }
    }
    

    또는 xml 접근 방식

    <context:property-placeholder location="classpath*:foo.properties"/>
    
  3. from https://stackoverflow.com/questions/25257237/how-to-use-spring-value-annotation-in-class-level-variables by cc-by-sa and MIT license