加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

java-使用工厂方法中定义的属性

发布时间:2020-12-15 01:21:56 所属栏目:大数据 来源:网络整理
导读:我编写了一个工厂bean,它根据应用程序特定的属性文件中配置的属性创建一个缓存管理器. 概念是可以选择多个实现,每个实现都使用其他配置属性. 例如: noop缓存,不带参数, ehcache与#max个对象 具有多个ip和端口配置的内存缓存. 我认为最好不要在application-c

我编写了一个工厂bean,它根据应用程序特定的属性文件中配置的属性创建一个缓存管理器.

概念是可以选择多个实现,每个实现都使用其他配置属性.

例如:

> noop缓存,不带参数,
> ehcache与#max个对象
>具有多个ip和端口配置的内存缓存.

我认为最好不要在application-context.xml中指定所有特定于缓存的应用程序参数,而是从现有属性源中读取它们.

我的尝试是使用EnvironementAware接口来访问环境.但是似乎使用< context:property-placeholder>配置的属性文件不包含在PropertiesSources中.

example.properties

cache.implementation=memcached
cache.memcached.servers=server1:11211,server2:11211

application-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;
    }

}
最佳答案
在这样的配置文件中:

 <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;

your.properties包含以下内容:

cities = my test string 
property1.email = answer@stackvoerflow.com

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读