ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • @ConfigurationPropertiesScan 과 생성자 바인딩
    Spring/Spring Boot 2020. 12. 15. 00:35

     

    기존 @ConfigurationProperties 

     

    application.properties

    •  application.properties에 여러 값들을 정의해 놓고 원하는 클래스에서 바인딩을 받고 싶다면

    • 다음과 같이 프로퍼티 설정파일에 값을 이용하려면 @ConfigurationProperties 와
    • @Component를 통해서 선언해주었어야 했다.

     

    • 혹은 다음과 같이 @EnableConfigurationProperties에 바인딩 받는 클래스를 모두 적어주어야 됐다.

     

     

     

    • 실제 ApplicationRunner을 통해 확인해보면 값이 잘 바인딩된 것을 알수 있다.

     

     

     

    @ConfigurationPropertiesScan


    • 스프링 부트 2.2 버전 이후 @ConfigurationPropertiesScan이 등장했다.

     

    • 기존과 달리 @ConfigurationPropertiesScan만 붙이게 되면 해당 클래스에 @Component를 붙이지 않아도 알아서 바인딩 해주는 모습을 볼 수 있다.

     

    이렇게 ConfigurationPropertiesScan을 쓰는 이점을 무엇일까?


    • 그 이유는 Immutable한 @ConfigurationProperties를 지원하는 @ConstructorBinding을 쓸 수 있기 때문이다.
    • 즉 세터(setter)가 아닌 생성자를 사용해서 프로퍼티를 바인딩할 수 있는 기능을 지원한다.

     

    • Immtable 하다는 것은 우리가 바인딩 받은 객체들은 setter가 존재하고 이에 수정이 가능하다는 이야기 이다.

     

    • 즉 프로퍼티에서 가져온 값이 아닌 누군가가 변경한 값을 쓸수도 있다는 소리가 된다.
    • 이런 경우에 대비해 Immutable한 ConfigurationProperties를 스프링 부트에서는 제공한다.

     

     

    • 그 어노테이션이 @ConstructorBinding인데 이를 사용시 setter가 아닌 생성자를 사용해서 바인딩 받게 된다.

     

    • 이렇게 되면 생성이 된 이상 새로운 객체를 만들지 않는다면 변경할 방법이 없는
    • Immutable한 객체를 보장하게 된다.

     

    • 이러한 @ConstructorBinding 을 쓰려면 @ConfigurationPropertiesScan을 쓰거나
    • @EnableConfigurationProperties로 일일히 등록해주어야 한다.

     

     

     

Designed by Tistory.