properties 파일의 key 값이 아래와 같이 같은 값으로 시작할 때, 그것을 묶어서 Bean으로 등록할 수 있다.
먼저 @ConfigurationProperties 어노테이션을 붙여 클래스를 만들어 준다. key값이 my로 시작했기때문에 값은 my로 준다.
@ConfigurationProperties 어노테이션을 붙여주면, 메타데이터를 생성해 자동완성 기능을 가능하게 해주는 의존성을 추가하라고 뜨는데, 의존성은 아래와 같다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
그 후, properties파일에 있던 name, age, fullName을 받을 변수를 정의하고 getter, setter를 만들어준다.
이렇게 하면 @ConfigurationProperties 어노테이션을 처리하는 애가 멤버 변수에 값을 바인딩 받을 수 있는 상태로 만들 수 있게 한 것이고, 아직 사용은 하지 못한다.(만약 .properties 에 my.fullName을 my.full-name이나 my.full_name 으로 한다고 하더라도 융통성있게 바인딩해준다.)
이것을 사용하려면, main에 @EnableConfigurationProperties 어노테이션을 사용하여 사용할 프로퍼티 클래스를 값으로 줘서 사용해야한다. 그렇게 하면, 만들어준 프로퍼티 클래스도 Bean으로 등록해주고 @ConfigurationProperties 어노테이션도 처리해준다.
스프링부트에서는 이것이 자동으로 등록되어있기 때문에 안 해줘도 되고, 그냥 아까 만들어준 프로퍼티 파일만 Bean으로 등록해주면 된다.
.properties에 있는 값들은 기본적으로 모두 문자열이다. 따라서 숫자를 써도 문자열이지만, 문자가 int로 자동 컨버팅되어서 들어간다.
이 값을 사용하기 위해서는 @Autowired로 주입받아 getter를 이용해 사용하면 된다.
properties가 애플리케이션 안에 있지 않고, jar파일에 있거나 다른곳에 있는 경우에는 클래스 위에 @Component를 붙여 Bean으로 만들어 줄 수가 없다.
이런 경우는 @Bean(개발자가 직접 제어가 불가능한 외부 라이브러리를 Bean으로 등록하는 어노테이션) 어노테이션에다가도 @ConfigurationProperties("prefix값") 어노테이션을 사용할 수 있다.
@Validated 어노테이션을 붙여준다.
그러면 @NotEmpty. @Size 등의 여러 검사 어노테이션을 붙여서 유효성 체크를 해줄 수 있다.
@Value 어노테이션으로 프로퍼티 값을 쓰는 것보다, 이런식으로 prefix값으로 프로퍼티를 구분하여, 클래스를 만들어 @ConfigurationProperties 어노테이션을 사용하여 프로퍼티 값을 사용하는 것이 매핑도 유연하게 할 수 있다는 장점이 있다.
@Value는 SpEL을 사용할 수 있지만, 위의 방식은 SpEL은 사용할 수 없다.