복붙노트

[SPRING] bean 클래스의 속성 값은 생성자에서 null입니다.

SPRING

bean 클래스의 속성 값은 생성자에서 null입니다.

내 서비스 구현 클래스 / bean에서 내 application.properties 파일의 값을 사용하려고합니다. 그러나 bean이 my config 클래스를 통해 초기화 될 때, 프로퍼티 값은 모두 null이다.

구성 클래스 :

@Configuration
public class AppConfig {
    @Bean AppServiceImpl appServiceImpl() {
        return new AppServiceImpl();
    }
}

서비스 클래스 :

@Component
public class AppServiceImpl implements AppService {
    @Value("${value.one}")
    String value_one;

    @Value("${value.two}")
    String value_two;

    @Value("${value.three}")
    String value_three;

    //values are null here
    public AppServiceImpl() {
        functionOne(value_one, value_two, value_three);
    }
}

application.properties (src / main / resources 아래) :

value.one=1
value.two=2
value.three=3

일부 디버깅 할 AppConfig 클래스를 찾을 수 있습니다 속성 파일을 발견하고 @Value ( "$ {value.one}") String value_one; 거기 그것은 그것이 값 1을 기대 한대로 받았다는 것을 보여준다.

그러나 내 App ServiceImpl 클래스에서 모든 값은 null입니다. 여기서 내가 뭘 잘못하고 있니? 이것이 Spring Boot에서 어떻게 올바르게 수행되어야 하는가? 아니면 그냥 봄.

감사.

해결법

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

    1.생성자의 값을 사용하면 즉시 사용할 수 없습니다. 실제로 그들은 특성에 주입된다. 여기서 일어난 일은 봄이 인스턴스를 생성 한 후 속성 값을 업데이트하는 것입니다.

    생성자의 값을 사용하면 즉시 사용할 수 없습니다. 실제로 그들은 특성에 주입된다. 여기서 일어난 일은 봄이 인스턴스를 생성 한 후 속성 값을 업데이트하는 것입니다.

    생성자에서 이러한 값을 사용하려면 생성자 주입을 사용해야합니다. 생성자에 의한 주입은 모범 사례입니다.

    public class AppServiceImpl implements AppService {
        String value_one;
        String value_two;
        String value_three;
    
        //values are null here
        public AppServiceImpl(String value1, String value2, String value3) {
            value_one = value1;
            value_two = value2;
            value_three = value3;
            functionOne(value_one, value_two, value_three);
        }
    }
    

    그리고 구성 클래스

    @Configuration
    public class AppConfig {
        @Bean AppServiceImpl appServiceImpl(@Value("${value.one}") String value1,  @Value("${value.two}") String value2,  @Value("${value.three}") String value3) {
            return new AppServiceImpl(value1, value2, value3);
        }
    }
    
  2. ==============================

    2.이러한 값은 인스턴스가 작성된 후에 주입됩니다. 그래서 그들은 생성자에서 null입니다.

    이러한 값은 인스턴스가 작성된 후에 주입됩니다. 그래서 그들은 생성자에서 null입니다.

    값이 삽입 된 후 메소드를 실행하려면 @ javax.annotation.PostConstruct를 사용하십시오.

    @PostConstruct
    public void init(){ // method name doesn't matter
         functionOne(value_one, value_two, value_three);
    }
    
  3. from https://stackoverflow.com/questions/50525053/property-values-in-bean-class-are-null-in-constructor by cc-by-sa and MIT license