【问题标题】:Can I provide my own variable interpolator for spring?我可以为 spring 提供我自己的变量插值器吗?
【发布时间】:2012-08-16 10:43:10
【问题描述】:

我了解到我可以为 Spring 提供 <context:property-placeholder> 元素,该元素似乎使用 PropertyPlaceholderConfigurer 来针对属性文件插入变量(即替换 ${foo} 之类的标记)。

有没有办法自定义用于解析令牌的类?特别是,我很想使用 Apache Commons Config Configuration 对象来提供标记的值,而不是使用属性文件。

【问题讨论】:

标签: java spring configuration apache-commons-config


【解决方案1】:

是的,继承 PropertyPlaceholderConfigurer 并覆盖 loadProperties 方法。这个方法传递了一个Properties 对象,您可以根据需要填充值。或者,您可以定义PropertiesPersister 的替代实现并将其插入普通的PropertyPlaceholderConfigurer

在 Spring 3.1 中,您可以通过创建自己的 PropertySource 实现并将其注册到应用程序上下文(通常使用 ApplicationContextInitializer)直接从您的公共配置对象中提取值。 This blog post 很好地概述了该过程。 Spring 3.1 中的 <context:property-placeholder> 将从注册的 PropertySources 以及您指定的任何属性文件中提取值。

【讨论】:

  • 然后用这个类做什么?大概我必须以某种方式告诉我的弹簧配置。
  • 是否有基于非Properties 对象的实现? Commons Configuration 接口不是 Properties 的子类 - 我可能必须对 Properties 进行子类化,以便它包装 Configuration。
  • 在 Spring 3.1 中,是的,我已经编辑了我的答案,并带有指向有用博客文章的链接。
  • 第一部分非常有用,因为我正在编写一个独立的应用程序。但是它没有提到(尽管@Ian 有!)你需要添加<context:property-placeholder/> 才能让它工作!
猜你喜欢
  • 2021-02-15
  • 2021-07-19
  • 1970-01-01
  • 1970-01-01
  • 2021-06-16
  • 2014-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多