我正在使用Spring 4.1.6。 我有以下内容:
foo.properties:
defaultConfig {
applicationId "com.game"
minSdkVersion 9
targetSdkVersion 22
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_5
targetCompatibility JavaVersion.VERSION_1_5
}
}
Spring bean:
valueX=a
valueY=b
我有一个非Spring类,它还需要使用来自foo.properties的值。
非春季班:
<context:property-placeholder location="classpath:foo.properties" ignore-unresolvable="false" ignore-resource-not-found="false" />
<bean id="foo" class="com.foo.bar.MyClass" >
<property name="someValue" value="${valueX}" />
</bean>
当Spring加载foo.properties时,有没有办法将所有属性填充到System属性中,这样我就可以使用System.getProperty(“valueY”)获得“valueY”。
我不想在非Spring类中再次加载foo.properties。
答案 0 :(得分:0)
context:property-placeholder
将为您创建一个PropertySourcesPlaceholderConfigurer
配置bean。您无法按照here所述的方式以编程方式访问此bean中的属性。
您可以做的是将属性加载到单独的spring bean中,如下所示。
@Bean(name = "mapper")
public PropertiesFactoryBean mapper() {
PropertiesFactoryBean bean = new PropertiesFactoryBean();
bean.setLocation(new ClassPathResource("application.properties"));
return bean;
}
然后使用下面给出的侦听器在完成上下文加载时设置系统属性。得到了这个answer
的代码@Component
public class YourJobClass implements ApplicationListener<ContextRefreshedEvent> {
@Resource(name = "mapper")
private Properties myTranslator;
public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
System.setProperties(myTranslator);
}
}