我编写了一个工厂 bean,它根据应用程序特定属性文件中配置的属性创建缓存管理器。
这个概念是可以选择多个实现,每个实现都使用其他配置属性。
例如:
- noop 缓存,无参数,
- 具有#max 个对象的 ehcache
- 配置了多个 ips 和端口的 memcache。
我认为最好不要在 中指定所有缓存应用程序特定的参数application-context.xml
,而是从现有的属性源中读取它们。
我的尝试是使用EnvironementAware
接口来访问Environement
. 但似乎使用配置的属性文件<context:property-placeholder>
不包含在PropertiesSources
.
例子.properties
cache.implementation=memcached
cache.memcached.servers=server1:11211,server2:11211
应用程序上下文.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;
}
}