• 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类型集合

  • 相关阅读:
    JavaScript手把手教你写出令人窒息的烂代码
    查询数据库表名,数据表信息,MySQL Key值(PRI, UNI, MUL)的含义
    【转载】 世界读书日:来自李开复的六个读书建议
    安装python库roboschool运行报错:ImportError: libpcre16.so.3: cannot open shared object file——解决方法
    Python 二次开发 AutoCAD 简介
    MATLAB元胞数组删除一个元素
    英语单词积累
    一战后德国要支付1320亿金马克的赔款,都按期足额付完了吗
    cad无级缩放
    [转]mysql导入数据load data infile用法
  • 原文地址:https://www.cnblogs.com/dorothychai/p/3951043.html
Copyright © 2020-2023  润新知