토비의 스프링 3.1의 내용을 요약한 자료입니다. 개념적인 설명만 요약하였으며 개념의 이해를 돕는 구체적인 코드 및 예제를 살펴보시려면 책을 참조하시기 바랍니다.
포스팅한 내용이 저작권의 문제가 발생할 수 있는 경우 게시물은 삭제/비공개 처리 될 수 있습니다.
@PropertySource
- 프로퍼티에 들어갈 DB 연결정보는 텍스트로 된 이름과 값의 쌍으로 구성되면 된다.
- 프로퍼티 파일의 확장자는 보통 properties이고, 키=값 형태로 프로퍼티를 정의한다.
1
2
3
4
|
db.driverClass=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost/springbook?characterencoding=UTF-8
db.username=spring
db.password=book
|
|
- properties 파일의 내용을 컨테이너의 프로퍼티 소스로 사용하도록 @PropertySource 애노테이션을 넣어준다
1
2
|
@PropertySource("/database.properties")
public class AppContext {
|
|
- @PropertySource로 등록한 리소스로부터 가져온 프로퍼티 값은 컨테이너가 관리하는 Environment 타입의 환경 오브젝트에 저장되며 @Autowired를 통해 필드로 주입받을 수 있다.
- Environment 오브젝트의 getProperty() 메소드를 이용해 프로퍼티 값을 가져올 수 있다.
- AppContext 소스코드를 수정하고 빌드할 필요없이 환경에 따라 달라지는 DB 연결정보는 프로퍼티 파일 내용을 수정하기만 하면 된다.
PropertySourcesPlaceholderConfigurer
- @Value 애노테이션을 사용하면 Environment 오브젝트를 @Autowired 로 주입받을 필요가 없다.
- 프로퍼티 소스로부터 가져온 값을 @Value 필드에 주입하려면 PropertySourcesPlaceholderConfigurer를 빈으로 정의해줘야 한다.
1
2
3
4
|
@Bean
public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
|
|
- 빈 팩토리 후처리기로 사용되는 빈의 설정 메소드는 반드시 스태틱 메소드로 선언해야 한다.
- @Value로 선언한 네 개필드에는 프로퍼티 값이 자동으로 주입될 것이다.
- @Value를 이용하면 타입 변환이 필요한 프로퍼티를 스프링이 알아서 처리해준다는 장점이 있다.
- 하지만 프로퍼티 값을 주입받도록 클래스에 필드를 선언하는 것은 조금 부담스러울 수 있다.
- Environment를 이용해 프로퍼티 값을 가져오는 방법과 @Value를 이용하는 방법 중 작성하기 편하고 코드를 이해하기 쉽다고 생각되는 방법을 선택하면 된다.