我有以下bean声明:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>WEB-INF/classes/config/properties/database.properties</value> <value>classpath:config/properties/database.properties</value> </list> </property> <property name="ignoreResourceNotFound" value="true"/> </bean> <bean id="dataSource" 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>
现在,我想将上方PropertyPlaceholderConfigurer更改为以下格式:
<context:component-scan base-package="org.example.config"/> <util:properties id="jdbcProperties" location="classpath:config/properties/database.properties"/>
<context:property-placeholder ... />是与PropertyPlaceholderConfigurer等效的XML。所以,选择那个。在<util:properties/>简单的工厂一个java.util.Properties实例可以注入。
<context:property-placeholder ... />
PropertyPlaceholderConfigurer
<util:properties/>
java.util.Properties
在Spring 3.1(不是3.0 …)中,你可以执行以下操作:
@Configuration @PropertySource("/foo/bar/services.properties") public class ServiceConfiguration { @Autowired Environment environment; @Bean public javax.sql.DataSource dataSource( ){ String user = this.environment.getProperty("ds.user"); ... } }
在Spring 3.0中,你可以使用SpEl批注“访问”使用PropertyPlaceHolderConfigurer机制定义的属性:
@Value("${ds.user}") private String user;
如果要一起删除XML,只需使用Java配置手动注册PropertyPlaceholderConfigurer。我更喜欢3.1方法。但是,如果你使用Spring 3.0方法(因为3.1尚不支持GA …),你现在可以像上面这样定义XML:
@Configuration public class MySpring3Configuration { @Bean public static PropertyPlaceholderConfigurer configurer() { PropertyPlaceholderConfigurer ppc = ... ppc.setLocations(...); return ppc; } @Bean public class DataSource dataSource( @Value("${ds.user}") String user, @Value("${ds.pw}") String pw, ...) { DataSource ds = ... ds.setUser(user); ds.setPassword(pw); ... return ds; } }
注意,PPC是使用static bean定义方法定义的。这是确保豆类尽早注册所必需的,因为PPC是BeanFactoryPostProcessor-它可以在上下文中影响豆类本身的注册,因此必须先进行其他所有事情的注册。
static
BeanFactoryPostProcessor-