本节主要是表达式装配! 解决运行时动态值的装配问题!
----------------------------------
1 字面值
<property name="count" value="#{5}"/>
<property name="message" value="the value is #{5}"/>
<property name="f" value="#{89.7}"/>
<property name="c" value="#{1e4}"/>
<property name="name" value="#{'chuck'}"/>
<property name="name" value='#{"chuck"}'/>
<property name="n" value="#{false}"/>
2 引用Bean Properties和方法
<property name="is" value="#{beanId}" />
<property name="x" value="#{kenny.song}" />
<property name="song" value="#{a.method()}" />
<property name="song" value="#{a.method().toUpperCase() }" />
为了避免空指针
<property name="song" value="#{a.method()?.toUpperCase() }" />
3 操作类
<property name="x" value="#{T(java.lang.Math).PI}" />
<property name="x" value="#{T(java.lang.Math).random() } " />
4 运算符
算术运算 + - * / % ^
关系运算 < > == <= >= lt gt eq le ge
逻辑运算 and or not |
条件运算 ?:(ten)
正则表达式 matches
5 数值运算
<property name="x" value="#{counter.aaa+42}" />
<property name="x" value="{a.c+ ' ' + a.b}"/>
<property name="aaa" value="#{shape.kind =='ccc' and shape.xxx gt 10}" />
<property name="aaa" value="#{!shape.available}" />
<property name="aaa" value="#{not shape.available}" />
<property name="aaa" value="#{shape.available? a:b}" />
<property name="aaa" value="#{shape.available? :b}" />跟上面等价!
操作集合
<util:list id="cities">
<bean class="xxx" p:name="xx" p:state="li" p:pu="x" />
<bean class="xxx" p:name="xx" p:state="li" p:pu="x" />
<bean class="xxx" p:name="xx" p:state="li" p:pu="x" />
<bean class="xxx" p:name="xx" p:state="li" p:pu="x" />
<bean class="xxx" p:name="xx" p:state="li" p:pu="x" />
<bean class="xxx" p:name="xx" p:state="li" p:pu="x" />
</util:list>
接着使用它
<property name="s" value="#{cities[2]}" />
如果是取map里的对象
<property name="s" value="#{cities['ss']}" />
======================================
从配置文件初始化properties
<util:properties id="s" location="classpath:a.b.name"/>
环境变量
<property name="s" value="#{systemEnvironment['name']}" />
如果想从一个集合中查出若干条件的
<property name="a" value="#{cities.?[ member gt 1000]}" />
结果是一个新的集合
而.^[]和.$[]分别查出第一个和最后一个匹配项。
=====聊聊投影集合
<property name="c" value="#{cities.![name]}" />结果是一个集合。
<property name="c" value="#{cities.![name +‘, ’+state]}" />结果是一个集合。