如何在message.properties中引用消息?是否支持eval表达式?
Hey there! Let's tackle your questions about message.properties references and eval expressions step by step.
在message.properties中引用配置项与Eval表达式支持的解决方案
1. 如何让配置项的引用生效
首先,标准Java Properties文件本身是支持${key}格式引用其他配置项的,但默认的java.util.Properties类并不会自动解析这些占位符——这大概率是你配置不生效的原因。
拿你的配置举例:
my.hello=hello my.hello-world=${my.hello} world!
要让这个引用正常工作,得用支持占位符解析的工具:
- 如果是Spring项目:使用
ReloadableResourceBundleMessageSource或者配置PropertySourcesPlaceholderConfigurer,它们会自动处理这种占位符引用,解析后my.hello-world的值就是hello world!。 - 如果是纯Java项目:可以用Apache Commons Configuration的
PropertiesConfiguration,它自带占位符解析功能;或者自己写个简单的工具方法,遍历配置项,把${...}替换成对应的配置值。
2. 是否支持Eval表达式
标准的Properties文件本身不支持Eval表达式,没法直接写动态计算的逻辑。不过在特定框架下有替代方案:
- Spring项目:可以用SpEL(Spring表达式语言)来实现类似Eval的功能,比如把配置改成:
只要你的配置加载器开启了SpEL支持(比如my.hello=hello my.hello-world=#{'${my.hello}' + ' world!'}PropertySourcesPlaceholderConfigurer),就能解析这种表达式。 - 其他场景:如果用Apache Commons Configuration,可以自定义表达式处理器来实现动态计算,但这需要额外写代码扩展,不像框架支持那样开箱即用。
内容的提问来源于stack exchange,提问作者Dean Xu
相关产品推荐
相关产品推荐

