ApplicationContext는 BeanFactory 기능 말고도 여러가지 기능을 가지고 있다.
ApplicationContext는 'EnvironmentCapable'를 상속받고 있다.
EnvironmentCapable은 2가지 기능이 있다.
1. 프로파일
2. 프로퍼티
프로파일은 Bean들의 묶음이다.(테스트 환경에서는 어떤 묶음의 Bean들을 쓰겠다. 실제 배포에서는 어떤 묶음의 Bean들을 쓰겠다는 것이다.)
Environmet는 활성화 할 프로파일을 확인하고 설정해주는 것이다.
기본적으로는 default 프로파일로 설정되어있다.
Default 프로파일은 직접 프로파일 설정하지 않아도 적용되는 프로파일이다. 직접 생성한 Bean들도 따로 어떤 프로파일에 들어가는지 설정하지 않으면 전부 Default 프로파일에 속한다.
Bean에 특정 프로파일을 설정하려면 @Profile("프로파일이름")
형식으로 지정해준다.(@Component @Profile("")도 마찬가지로 사용가능하다.)
또한 클래스가 아닌 메소드 자체에도 사용가능하다.
프로파일 이름을 줄 때, 표현식(!, &, |)도 사용가능 하다.
이후 이 Bean을 사용하려고 하면 실행오류가 난다. 왜냐하면 test 프로파일을 적용해주지 않았기 때문이다. test 프로파일을 적용하기 위해서는 아래와 같이 해주어야한다.
먼저 실행 버튼 좌측을 눌러 Edit Configuration을 눌러준다.
그 후, VM options에 -Dspring.profiles.active="프로파일명1, 프로파일명2..."
을 적어주고 적용하면 된다.
[현재 적용중인 프로파일과 default 프로파일을 확인해볼때 사용하는 코드]
어플리케이션에 등록되어 있는 여러 key-value로 제공되는 프로퍼티에 접근할 수 있는 기능이다.
여러 프로퍼티들은 계층형구조이다.(우선 순위가 존재한다는 뜻)
프로퍼티를 설정해주는 방법은 아래와 같다.
resources 디렉토리에 ~.properties
파일을 만들어준다.
아래와 같이 key-value 꼴로 값을 미리정해놓을 수 있다.
그 후, @PropertySource 라는 어노테이션을 사용해서 이 어플리케이션이 만들어준 app.properties 파일을 참조할 수 있도록 한다.
이 프로퍼티들을 가져올 수 있는 방법 중 2가지를 알아보려고 한다.
Environment 객체의 getProperty 메소드를 이용해서 프로퍼티 값을 가져올 수 있다. .properties 파일의 key에 해당하는 값으로 값을 가져온다.
@Value 어노테이션을 사용해서 값을 가져올 수도 있다. .properties 파일의 key에 해당하는 값으로 값을 가져온다.
Environment 객체를 주입받아 사용하려 할 때, null 값이 들어가는 경우가 있다. 이 경우 해당 클래스가 Bean으로 등록되어 있는 지 확인해보는 것을 추천한다.
글 잘 봤습니다! 따로 정리하는 글에 붙여넣고 싶은데 출처 밝히고 퍼가도 될까요?!