본문 바로가기

SpringFramework Core - I. IoC 컨테이너/8. 컨테이너의 확장가능한 부분들

1.8.2.2. 예시: PropertyOverrideConfigurer

또다른 bean 팩토리 후처리자인 PropertyOverrideConfigurer은 PropertySourcesPlaceholderConfigurer와 유사하다. 하지만 후자와 달리, bean 프로퍼티들을 위한 기본적인 정의가 기본 값들을 갖거나 아무 값을 가지지 않을 수도 있다. 만약 Properties 파일을 오버라이딩하는 것이 특정한 bean 프로퍼티로의 진입점을 갖지 않는다면, 기본적인 context 정의가 사용될 것이다.

 

bean 정의는 오버라이드되도록 알려져 있지 않다는 점의 주의하라. 그래서 XML 정의 파일에서 오버라이드 설정자가 사용된다는 것이 즉시 명백해지는 것은 아니다. 같은 bean 프로퍼티에 대해 여러 PropertyOverrideConfigurer 인스턴스들이 서로 다른 값을 정의하고 있는 경우에는, 오버라이딩 메커니즘에 의해 가장 마지막 값이 선택된다. 

 

프로퍼티 설정 파일은 다음과 같은 형식을 지닌다.

beanName.property=value

다음은 형식에 대한 예시다.

dataSource.driverClassName=com.mysql.jdbc.Driver
dataSource.url=jdbc:mysql:mydb

이 예시 파일은 driver와 url 프로퍼티를 가지고 있는 dataSource라 불리는 bean을 포함하고 있는 컨테이너 정의와 함께 사용될 것이다.

 

복합적인 프로퍼티 이름 또한 지원된다. 오버라이드된 마지막 프로퍼티를 제외한 모든 컴포넌트의 경로가 이미 non-null일 것이다. 다음 예시에서와 같이, 'tom' bean의 'fred' 프로퍼티의 'bob' 프로퍼티의 'sammy' 프로퍼티는 스칼라 값인 123으로 세팅되어있다. 

tom.fred.bob.sammy=123

 

  특정된 오버라이드 값들은 항상 문자인 값들이다. 그들은 bean의 참조로 번역되지 않는다. 이러한 관습은 XML bean 정의에서의 원래의 값이 bean의 참조를 특정할 때도 적용된다.

 

 

스프링 2.5에서 context 네임스페이스가 소개되면서, 설정 전용의 element를 오버라이드함으로써 프로퍼티를 설정하는 것이 가능해졌다. 다음 예시를 참고하라.

<context:property-override location="classpath:override.properties" />