SnEL 属性表达式(和基于属性的条件表达式)
SnEL 属性表达式,目前已应用于条件注解的 @Condition.onExpression 条件表达式。
1、属性表达式,首先是一个字符串存在
这个设定与我们正常的属性取值(properties.getProperty(key))效果是一样的。例如:
SnEL.eval("${user.name:solon}", Solon.cfg());
SnEL.eval("${user.name:solon} == 'solon'", Solon.cfg());
SnEL.eval("${xxx.enable:true} == 'true'", Solon.cfg());
SnEL.eval("${yyy.type:1} == '1'", Solon.cfg());
注意:'true' 和 '1' 是字符串常量
2、属性表达式的自适应增强
对于 ${xxx.enable:true} == 'true'(右侧为字符中常量) 这样的表达式,我们习惯上会觉得 ${xxx.enable:true} == true(右侧为布尔常量)更自然。
所以在设计时,如果是“比较操作符”处理,会把属性表达式转换成比较“常量”相同在类型,再进行比较。
从而支持(目前仅限比较操作符):
SnEL.eval("${xxx.enable:true} == true", Solon.cfg());
SnEL.eval("${yyy.type:1} == 1", Solon.cfg());
未来可能会增加 “算数操作符” 的自适应增强支持。
3、@Condition.onExpression 条件表达式的安全限制
- 不能使用类型表达式(
T(java.lang.Integer).valueOf(45))
比如不能用:T(java.lang.Integer).parseInt(${yyy.type:1}) * 5 > 1