spring di

<?xml version="1.0" encoding="UTF-8"?>

<!-- 使用Spring的命名空间p装配属性,配置p -->

<beans xmlns="http://www.springframework.org/schema/beans"

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

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"

default-init-method="turnonLights" default-destroy-method="turnOffLights">

<!-- 如上两行,为容器中所有的Bean设置初始化和销毁方法 -->

<!-- Bean declarations go here -->

<bean id="duke" class="com.bean.PoeticJuggler">

<!-- 构造函数参数 -->

<constructor-arg value="15" />

<constructor-arg value="sonnet29" />

</bean>

<bean id="sonnet29" class="com.bean.Sonnet29" />

<!-- factory-method==>对于没有公开构造方法的Bean,配置静态工厂方法 -->

<bean id="theStage" class="com.bean.Stage" factory-method="getInstance" />

<!-- bean初始化调用方法设置init-method bean销毁时调用方法设置destroy-method -->

<bean id="auditorium" class="com.bean.Auditorium" init-method="turnOnLights"

destroy-method="turnOffLights" />

<bean id="kenny" class="com.bean.Instrumentalist">

<property name="song" value="Jingle Bells"/>

<!-- 引用其他的bean -->

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

<!-- 定义内部Bean,仅该bean可用

内部bean还可以作为构造方法参数传入

<constructor-arg>

<bean class="com.bean.SaxoPhone"/>

</constructor-arg>

-->

<property name="instrument">

<bean class="com.bean.SaxoPhone"/>

</property>

</bean>

<!-- 使用命名空间p来配置 -->

<bean id="kenny2" class="com.bean.Instrumentalist"

p:song="Jingle Bells"

p:instrument-ref="saxophone"/>

<bean id="saxophone" class="com.bean.SaxoPhone"/>

<!-- 

Collection<Instrument>

List<Instrument>

Instrument[]

集合元素配置,数组和Collection的实现类的集合均可用list或者set来描述

list中元素允许重复

set中元素不允许重复

map中名称和值可以是任意类型

props中名称和值必须是String

-->

<bean id="hank" class="com.bean.OneManBand">

<property name="instruments">

<list>

<ref bean="guitar"/>

<ref bean="cymabal"/>

<ref bean="harmonica"/>

</list>

</property>

</bean>

<!-- 

map装配key-value形式集合,内容可以是任何类型

<entry>中的键和值:

key:指定map中entry的键为String

key-ref:指定map中的entry的键为Spring上下文中其他的Bean引用

value:指定map中的entry的值为String

value-ref:定map中的entry的键为Spring上下文中其他的Bean引用

-->

<bean id="hank2" class="com.bean.OneManBand">

<property name="instrments">

<map>

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

<entry key="CYMABAL" value-ref="cymabal"></entry>

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

</map>

</property>

</bean>

<!-- 

<props>装配properties类型

<property>元素用于把值或者Bean引用注入到Bean的属性中

<props>元素用于定义一个java.util.Properties类型的集合值

<prop>元素用于定义<props>集合的一个成员。

-->

<bean id="hank3" class="com.bean.OneManBand">

<property name="instruments">

<props>

<prop key="GUITAR">STRUM STRUM STRUM</prop>

<prop key="CYMBAL">CRASH CRASH CRASH</prop>

<prop key="HARMONICA">HUM HUM HUM</prop>

</props>

</property>

</bean>

<!--设置null元素  -->

<bean id="someNonNullProperty" class="com.bean.null">

<property name="someNonNullProperty"><null/></property>

</bean>

<!-- 

Spring表达式语言:SpEL,他通过运行期执行的表达式将值装配到Bean的属性或构造器的参数中

SpEL特性:

使用Bean的ID来引用Bean

调用方法和访问对象的属性

对值进行算术、关系和逻辑运算

正则表示匹配

集合操作

 -->

 <bean id="SpEL" class="SpEL">

 <!-- 字面值引用 -->

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

 <property name="message" value="The value is #{5}"/>

 <property name="frequency" value="#{89.7}"/>

 <property name="capacity" value="#{1e4}"/>

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

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

 <property name="enabled" value="#{false}"/>

 <!-- 引用Bean、Properties和方法 

 Bean:#{Bean的ID}

 -->

 <property name="instruments" value="#{saxophone}"/>

 <!-- 引用Bean的属性的值 -->

 <property name="instruments" value="#{saxophone.name}"/>

 <!-- 调用方法 -->

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

 <!-- 

 调用方法中如果返回值是一个null值,将出现NullPointerException,

 避免的方法:使用null-safe

 如果selectSong()方法返回的是null则不再调用toUpperCase()

  -->

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

  <!-- 操作类:在SpEL中,使用T()运算符会调用类作用域的方法和常量 -->

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

 </bean>

 <!-- SpEL执行操作 -->

 <!-- 

 -------------------------------------------------------------

 运算符类型      |运算符

 -------------------------------------------------------------

 算术运算          |+、-、×、/、%、^

 -------------------------------------------------------------

 关系运算          |<、>、==、<=、>=、lt、gt、eq、le、ge

 -------------------------------------------------------------

 逻辑运算          |and、or、not、|

 -------------------------------------------------------------

 条件运算          |?:(ternary)、?:(Elvis)

 --------------------------------------------------------------

 正则表达式      |matches

 --------------------------------------------------------------

  -->

  

  <bean id="cacl" class="com.bean.clas">

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

  <property name="adjustedAmount" value="#{counter.total-42}"/>

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

  <property name="average" value="#{counter.total/counter.count}"/>

  <property name="remainder" value="#{counter.total%counter.count}"/>

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

  <property name="fullName" value="#{performer.firstName+'  ' +performer.lastName}"/>

  <property name="equal" value="#{counter.total==100}"/>

  <property name="hasCapacity" value="#{counter.total le 10000}"/>

  <property name="largeCircle" value="shape.kind == 'circle' and shape.perimeter gt 10000"/>

  <property name="outOfStock" value="#{!product.available}"/>

  <property name="outOfStock" value="#{not product.available}"/>

  <property name="instrument" value="#{songSelector.selectSong()=='Jingle Bells'?piano:saxophone}"/>

  <property name="validEmail" value="#{admin.email matches '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.com'}"/>  

  <!-- 用<util:list>元素定义一个List集合 -->

  </bean>

</beans>

猜你喜欢

转载自alex-lip.iteye.com/blog/2175316
今日推荐