SnEL 属性表达式，目前已应用于条件注解的 `@Condition.onExpression` 条件表达式。


### 1、属性表达式，首先是一个字符串存在

这个设定与我们正常的属性取值（`properties.getProperty(key)`）效果是一样的。例如：

```java
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`（右侧为布尔常量）更自然。

所以在设计时，如果是“比较操作符”处理，会把属性表达式转换成比较“常量”相同在类型，再进行比较。

从而支持（目前仅限比较操作符）：

```java
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`

