Spring In Action ②

初始化和销毁Bean

init-method && destory-method

<bean id="auditorium" class="test.Audirorium" init-method="turnOnLights" destory-method="turnOffLights"/>

 

如果上下文中有很多Bean都有相同name的初始化方法和销毁方法。可以在Beans元素的default-init-method && default-destory-method方法中声明。

<beans xmlns=**********

    default-init-method="init"

    default-destroy-method="destory">

   <bean/>....



<beans>

使用<property>元素配置Bean属性,需要调用属性的setter方法来注入.

类似如下:

<property name="age" value="15"/>

命名空间p

<beans *********

    xmlns:p="http://www.springframework.org/schema/p">

....



   <p:age = "15"/>

   <p:instrument-ref="saxophone"/>

内部Bean(inner Bean) : 可以使用在setter和构造器注入两种.

<property name="instrument">

    <bean class="test.Saxophone"/>

</property>



类似:



<bean id="saxophone" class="test.Saxophone"/>

...

  <property name="instrument" ref="saxophone"/>

...

装配集合:可以装配各种集合,如java.util.List, java.util.Set, java.util.Collection, java.util.Map,java.util.Properties等等。可以设置properties和null值。

<list> 可重复

<set> 不可重复

<map>  name  value 可以是任意类型

<props> name value 必须是string类型

<property name="instruments">

    <list>

        <ref bean="guitar"/>

        <ref bean="harmonica"/>

    </list>

</property>

*****************************************

<property name="instruments">

    <list>

        <ref bean="guitar"/>

        <ref bean="guitar"/>

    </list>

</property>

*****************************************

<property name="instruments">

    <map>

        <entry key="Guitar" value-ref="guitar"/>

        <entry key="Hamonica" value-ref="harmonica"/>

    </map>

</property>

***************************************

key: entry键为string类型时

key-ref: entry键为其他Bean时

value: entry值为string类型时

value-ref: entry值为其他Bean时

***************************************

<property name="instruments">

    <props>

        <prop key="Guitar">guitar hum hum hum</prop>

        <prop key="Hamonica"><null/></prop>

    </props>

</property>

使用表达式装配

SpEL(Spring Expression Language)

字面值

<property name="count" value="#{5}"/>

<property name="count" value="#{5.98}"/>

<property name="name" value="#{'Chuck'}"/>

<property name="enable" value="#{true}"/>

 

引用bean

<!-- 引用bean -->

<property name="instrument" value="#{guitar}"/>

<property name="instrument" ref="guitar"/>



<!-- 会调用 kenny.getInstrument() -->

<property name="instrument" ref="#{kenny.instrument}"/>



<property name="song" ref="#{kenny.selectSong().toUpperCase()}"/>

<!-- 避免空指针异常,使用 ?. 代替 . 确保左边值不为null --> 

<property name="song" ref="#{kenny.selectSong()?.toUpperCase()}"/>

 

调用类的方法: T()运算符

<...    value="#{T(java.lang.Math).PI}"/>

 

使用SpEL进行数值运算

<...  value="#{counter.total + 42}"/>

<...  value="#{T(java.lang.Math).PI * circle.radius^2}"/>



<!-- 比较值 -->

<...  value="#{ circle.radius le 21}"/>

<!-- le less or equal -->

<!--eq   equal -->

<!--lt less -->

<!--gt great -->

<!-- ge great or equal -->

<!-- 逻辑表达式 and or not -->

<!-- 条件表达式 ?:-->

<!-- 正则表达式 -->

<...  value="#{admin.email matches '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.com' ? "right email" : "wrong email"}"

 

使用SpEL筛选集合

public class City{

    private String name;

    private String state;

    private Integer population;

}

 

<util:list id="cities">

    <bean class="test.City" p:name="Chicago" p:state"IL" p:population="232322"/>

    <bean class="test.City" p:name="Houston" p:state"TX" p:population="235452"/>

</util:list>

<!-- 访问集合 -->

<... value="#{cities[1]}"/>

 

加载properties配置文件

<util:properties id="settings" location="classpath:settings.properties"/>



<... value="#{settings['twitter.accessToken']}"/>

 

systemEnvironment 机器上的所有环境变量

systemProperties 包含了Java启动时所设置的所有属性(通常用-D参数)

<... name="homePath" value="#{systemEnvironment['HOME']}"/>

<... name="homePath" value="#{systemProperties['application.home']}"

 

SpEL查询集合

查询运算符  .?[](所有匹配项)   .^[] (第一个匹配项)  .$[] 最后一个匹配项

eg  cities.?[population gt 10000]  ---  集合

投影运算符  .![]

eg cities.![name]   只包含城市名的string类型集合

     cities.![name + ‘,’+ state]  包含城市名和地区的String类型集合

你可能感兴趣的:(spring)