首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从自定义类获取spring配置值

从自定义类获取spring配置值
EN

Stack Overflow用户
提问于 2009-04-13 04:38:07
回答 3查看 3.3K关注 0票数 1

我正在考虑使用Spring来组装我的应用程序的组件,但我遇到了一个问题。我们的应用程序使用一个配置存储库,该存储库对VM是全局的,并且与系统属性相似(但不完全相同)。

该配置接口的访问方式如下:

代码语言:javascript
运行
复制
Configuration.getDb ().get ("some_property_name")

有没有办法在Spring xml bean文件中使用这个全局配置中的值?getDb可能会根据配置库的当前状态(它具有上下文)返回不同的值,但我愿意声明,Spring配置将在应用程序上下文初始化时完全加载。尽管如此,更灵活的东西还是很棒的。

鉴于我是一名Spring新手,代码示例将使我的工作变得容易得多。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-04-17 14:51:25

为了进一步阐述cletus的建议,我会说您需要一个自定义的PropertyPlaceholderConfigurer子类,并覆盖resolvePlaceholder()方法,该方法将调用您的Configuration.getDb()代码。如果你不能解析这个值,那么委托回超类。

例如:

代码语言:javascript
运行
复制
public class MyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {
    @Override
    protected String resolvePlaceholder(String placeholder, Properties props) {
        String value = Configuration.getDb().get(placeholder)
        if (value == null) {
            value = super.resolvePlaceholder(placeholder, props);
        }
        return value;
    }
}

然后,只需在您的应用程序上下文中定义一个MyPlaceholderConfigurer类型的bean,spring将自动查询您的类以解析占位符值。

如果您的Configuration.getDb()组件不能解析该值,那么委托回超类将允许spring将该值作为系统属性进行查找。或者,您可以将属性文件注入到bean中,它也可以对此进行检查。

请阅读有关PropertyPlaceholderConfigurer基本用法的参考文档,以了解它的工作原理。它非常灵活。

票数 1
EN

Stack Overflow用户

发布于 2009-04-13 04:59:51

您可以这样做,尽管这不是处理配置数据的推荐方法。请参阅Spring参考文档的3.7 Container extension points

基本上,您需要创建一个自定义的BeanFactoryPostProcessor实现来替换如下表达式:

代码语言:javascript
运行
复制
${some_property_name}

根据回调使用适当的值。

以PropertyPlaceholderConfigurer的实现为起点。

票数 3
EN

Stack Overflow用户

发布于 2009-04-30 19:59:13

您可以完全在配置中完成此操作(我并不是说这真的很好;):

代码语言:javascript
运行
复制
<bean id="database" class="com.acme.Configuration" factory-method="getDb" />

<bean class="com.acme.YourHost">
  <property name="yourProperty">
    <bean factory-bean="database" factory-method="get">
      <constructor-arg value="some_property_name" />
    </bean>
  </property>
</bean>

Glad Spring3.0将包含一种适用于这种情况的表达式语言(请参阅blog post) :)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/743051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档