我编写了一个工厂bean,它根据在特定于应用程序的属性文件中配置的属性创建一个缓存管理器。
概念是可以选择多个实现,每个实现使用其他配置属性。
例如:
我认为不在application-context.xml
中指定所有特定于缓存应用程序的参数,但是从现有属性源中读取它们是很好的。
我的尝试是使用EnvironementAware
界面来访问Environement
。但似乎使用<context:property-placeholder>
配置的属性文件未包含在PropertiesSources
中。
example.properties
cache.implementation=memcached
cache.memcached.servers=server1:11211,server2:11211
应用context.xml中
<context:property-placeholder location="example.properties"/>
<bean id="cacheManager" class="com.example.CacheManagerFactory"/>
在CacheManagerFactory.java中
public class CacheManagerFactory implements FactoryBean<CacheManager>, EnvironmentAware {
private Environement env;
@Override
public CacheManager getObject() throws Exception {
String impl = env.getRequiredProperty("cache.implementation"); // this fails
//Do something based on impl, which requires more properties.
}
@Override
public void setEnvironment(Environment env) {
this.env = env;
}
@Override
public Class<?> getObjectType() {
return CacheManager.class;
}
@Override
public boolean isSingleton() {
return true;
}
}
答案 0 :(得分:3)
在这样的配置文件中:
<context:property-placeholder location="classpath:your.properties" ignore-unresolvable="true"/>
...
<property name="email" value="${property1.email}"/>
<!-- or -->
<property name="email">
<value>${property1.email}</value>
</property>
或代码:
@Value("${cities}")
private String cities;
你的.properties包含这个:
cities = my test string
property1.email = answer@stackvoerflow.com