Solon v3.6.2

SnEL 属性表达式(和基于属性的条件表达式)

</> markdown

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