
org.springframework.core.env 패키지에 속하며 현재 애플리케이션이 실행 중인 환경을 나타내는 인터페이스입니다.
애플리케이션 환경의 두 가지 주요 측면인 profile와 properties를 다룹니다.
Properties에 관한 접근은 상위 인터페이스인 PrepertyResolver를 통해 다루어집니다.
getActiveProfiles()를 통해 활성화 중인 Profile의 정보들을 가져올 수 있습니다.
package org.springframework.core.env;
public interface Environment extends PropertyResolver {
String[] getActiveProfiles();
String[] getDefaultProfiles();
@Deprecated
boolean acceptsProfiles(String... profiles);
boolean acceptsProfiles(Profiles profiles);
}
@Configuration은 스프링의 설정 클래스임을 나타내는 어노테이션으로, 내부적으로 @Component를 포함하고 있어 자동으로 빈으로 등록됩니다

싱글톤 보장
스프링 컨테이너 관리
스프링의 properties나 yaml에 있는 값들은 애플리케이션이 실행되면서 환경변수로 Environment에 등록이 된다. 그리고 해당 값들을 꺼내서 애플리케이션에서 활용하기 위한 방법으로는
@Value와 @ConfigurationProperties가 있다.
@server.admin-what-is-real-name=MangKyu
Value("${server.admin-what-is-real-name}") // 완벽히 일치하는 프로퍼티 이름으로만 가져올 수 있다.
private String adminName;
@ConfigurationProperties는 프로퍼티에 있는 값을 클래스로 바인딩하기 위해 사용되는 어노테이션이다. 값의 바인딩을 위해 Setter를 필요로 하며 생성자로 바인딩하기 위해서는 @ConstructorBinding을 붙여주어야 한다.@Getter
@Setter
@ConfigurationProperties(prefix = "server")
public class ServerInfo {
private final String adminWhatIsRealName;
}
@ConfigurationProperties를 사용하기 위해서는 @EnableConfigurationProperties에 해당 클래스를 지정해주거나 @ConfigurationPropertiesScan를 통해 스캐닝의 대상이 되도록 해주어야 한다.| server.admin-what-is-real-name | properties 와 .yml에 권장되는 표기법 |
|---|---|
| server.adminWhatIsRealName | 표준 카멜 케이스 문법 |
| server.admin_what_is_real_name | .properties와 .yml 에서 사용가능한 표기법 ( - 표기법이 더 표준임) |
| SERVER_ADMIN_WHAT_IS_REAL_NAME | 시스템 환경 변수를 사용할 때 권장되는 표기법 |
ConversionService를 통해 유효성 검사 및 데이터 변환을 지원한다.
스프링 공식 홈페이지나 구글링을 해봤을 때 성능 차이를 비교한 문서는 찾아보지 못했지만
생각해봤을 때 당연히 단일 값을 주입할 경우는 @Value를 쓰는 것이 편해서도 있겠지만 더 빨라서 쓰는 것도 있지 않을까 싶다.
우선 바인딩 과정이 필요가 없고 @ConfigurationProperties의 경우 ConversionService를 통한 타입 변환과 유효성 검사 과정이 포함되어있고 스프링 부트가 시작될 때 추가적인 초기화 작업 필요하기 때문에 더 느릴 것으로 추측된다.
https://mangkyu.tistory.com/207
https://junuuu.tistory.com/797