-
@ConfigurationPropertiesScan 과 생성자 바인딩Spring/Spring Boot 2020. 12. 15. 00:35
기존 @ConfigurationProperties
- 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로 일일히 등록해주어야 한다.
'Spring > Spring Boot' 카테고리의 다른 글
스프링 @Transaction 이해 (0) 2021.10.29 [springboot, kotlin] 배포시 FileReader FileNotFoundException (0) 2021.09.28 application.properties 란? (0) 2020.08.29 Spring Boot mockMvc 한글 깨짐 처리 (0) 2020.07.31 RestTemplate, WebClient (0) 2020.07.13