<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations" value="classpath:com/foo/jdbc.properties"/> </property> </bean> <bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="${jdbc.driverClassName}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean>
실제 값은 표준 Java Properties 형식의 다른 파일에서 가져옵니다:
jdbc.driverClassName=org.hsqldb.jdbcDriver
jdbc.url=jdbc:hsqldb:hsql://production:9002
jdbc.username=sa
jdbc.password=root
그래서 문자열 ${jdbc.username}은 런타임에 'sa'라는 값으로 교체되고 이와 같은 방식으로 property 파일의 키에 해당하는 다른 placeholder 값도 교체됩니다. PropertyPlaceholderConfigurer는 placeholder 를 bean이 정의된 위치에서 확인합니다. placeholder의 prefix와 suffix는 설정할 수 있습니다.
스프링 2.5 에서 소개된 context 네임스페이스를 사용하여, 전용 설정 값의 property placeholder 를 설정할 수 있습니다. location 속성에 쉼표를 사용하여 여러 위치를 제공할 수 있습니다.
<context:property-placeholder location="classpath:com/foo/jdbc.properties"/>
PropertyPlaceholderConfigurer는 명시된 Properties 파일에서 property를 찾지 못하면 Java System properties에서도 property를 찾습니다. configurer 에 systemPropertiesMode를 설정함으로써 이 동작을 변경할 수 있습니다. configurer 동작은 세 가지 값을 가질 수 있습니다: always override, never override, override 입니다. 더 자세한 정보는 PropertyPlaceholderConfigurer 의 Javadoc 을 참고하십시오.
클래스 이름 대입 / Class name substitution | |
---|---|
클래스 이름을 대입하기 위해 PropertyPlaceholderConfigurer를 사용할 수 있는데, 이 것은 런타임에 특정 클래스의 implementation을 선택할 때 유용합니다. 예를 들어: <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <value>classpath:com/foo/strategy.properties</value> </property> <property name="properties"> <value>custom.strategy.class=com.foo.DefaultStrategy</value> </property> </bean> <bean id="serviceStrategy" class="${custom.strategy.class}"/> If the class cannot be resolved at runtime to a valid class, resolution of the bean fails when it is about to be created, which is during the |