扩展Properties,用mvel来解析表达式减少重复输入
有时候,Properties中总有一些项目,其实重复部分很多。
就想着能不能象 编程一样,前面声明一个变量,后面可以用${variale}形式引用
研究了一下Properties的代码,做了如下扩展
以实现 .properties 文件中这样的定义。
basePackage = com.corp.project
modelPackage = ${basePackage}.model
controllerPackage = ${basePackage}.controller
表达式解析用了MVEL2的TemplateRuntime.
<dependency>
<groupId>org.mvel</groupId>
<artifactId>mvel2</artifactId>
<version>2.0.19</version>
</dependency>
public class EvaluateProperties extends Properties { private Map<String, Object> context = new HashMap<String, Object>(); @Override public synchronized Object put(Object key, Object value) { if (key == null) { throw new IllegalArgumentException("Key should not be null"); } Object resultValue; if (value != null) { String valueText = value == null?"":value.toString(); resultValue = TemplateRuntime.eval(valueText, this.context); } else { resultValue = ""; } this.context.put(key.toString(), resultValue); return super.put(key, resultValue); }}