Spring配置文件 装配Bean

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    <bean id="myBean" class="cn.com.jinlulu.pj.instance.Message">
        <property name="message"><!-- 这个中的name必须跟你的实体名字一样 -->
            <value>spring!</value>
        </property>
    </bean>
    <bean id="duke" class="cn.com.jinlulu.pj.springinaction.Juggler">
    	<constructor-arg value="15"/>
    </bean>
    <bean id="poeticDuke" class="cn.com.jinlulu.pj.springinaction.PoeticJuggler">
    	<constructor-arg value="15"/>
    	<constructor-arg ref="sonnect29"/>
    </bean>
    <bean id="sonnect29" class="cn.com.jinlulu.pj.dao.impl.Sonnect29">
    </bean>
    <bean id="theStage" class="cn.com.jinlulu.pj.springinaction.Stage"
    factory-method="getInstance">
    </bean>
    <bean id="kenny" class="cn.com.jinlulu.pj.springinaction.Instrumentalist">
    	<property name="song" value="BIGBONG"></property>
    	<property name="instrument" ref="saxophone">
    	<!-- 我可以将这个saxophone放在这里,可以防止其他bean调用,就只属于这个kenny的了 -->
    		<!-- <bean class="cn.com.jinlulu.pj.dao.impl.Saxophone"></bean> -->
    	</property>
    	<!-- 这里不能支持有多个属性可以用下面的list等 -->
     	<!-- <property name="instrument" ref="piano"></property> -->
    </bean>
    <!-- 另一种表达方式跟上面那个是一样的 -->
<!--     <bean id="Kenny" class="cn.com.jinlulu.pj.springinaction.Instrumentalist"
    p:song="BIGBONG" p:instrument-ref="saxophone"/> -->
    <bean id="saxophone" class="cn.com.jinlulu.pj.dao.impl.Saxophone"></bean>
    <bean id="piano" class="cn.com.jinlulu.pj.dao.impl.Piano"></bean>
    <!-- 从这里可以支持多个属性 -->
    <bean id="hand" class="cn.com.jinlulu.pj.springinaction.OneManBand">
    	<property name="instruments">
    		<list><!-- 可以支持成员重复 -->
    			<ref bean="piano"/><!-- 当然这个bean咱们在前面已经写好了 -->
    			<ref bean="saxophone"/>
    			<ref bean="saxophone"/><!-- 这行的内容可以表现出来 -->
    		</list>
    	</property>
    </bean>
    <bean id="hand2" class="cn.com.jinlulu.pj.springinaction.OneManBand">
    	<property name="instruments">
    		<set><!-- 不能支持成员重复 -->
    		<!-- set的在是可以配置java.util.List类型的属性的,但是要保证list类型的成员不重复 -->
    			<ref bean="piano"/>
    			<ref bean="saxophone"/>
    			<ref bean="saxophone"/><!-- 这行的内容没有输出来,可能就是因为set不能重复的原因,但是它也没报错 -->
    		</set>
    	</property>
    </bean>
    <!-- map -->
    <bean id="hand3" class="cn.com.jinlulu.pj.springinaction.OneManBand">
    	<property name="instrumentMap">
    		<map>
    			<entry key="PIANO" value-ref="piano"/>
    			<entry key="SAXOPHONE" value-ref="saxophone"/>
    		</map>
    	</property>
    </bean>
    <!-- 如果map中的key和value都为String,那也可以参照这种方法 -->
    <!-- <bean id="hand4" class="cn.com.jinlulu.pj.springinaction.OneManBand">
    	<property name="instrumentMap">instrumentMap的类型为Properties
    		<props>
    			<prop key="piano">BOON</prop>
    			<prop key="saxophone">TOOT</prop>
    		</props>
    	</property>
    </bean> -->
    <!-- 有些属性想让他为空值(这种情况不常见) -->
    <bean id="hand5" class="cn.com.jinlulu.pj.springinaction.OneManBand">
    	<property name="instrumentMap"><null/></property>
    </bean>
    <!-- SPEL -->
    <bean id="kenny2" class="cn.com.jinlulu.pj.springinaction.Instrumentalist">
    	<property name="song" value="#{3}"></property>
    	<!-- <property name="song" value="#{3.2}"></property>
    	<property name="song" value="#{1e4}"></property>
    	<property name="song" value="#{'chuck'}"></property>
    	<property name="song" value='#{"chuck"}'></property>
    	<property name="song" value="#{false}"></property> -->
    </bean>
    <!-- 使用spel将一个bean装配到instrument属性中 -->
    <bean id="kenny3" class="cn.com.jinlulu.pj.springinaction.Instrumentalist">
    	<property name="instrument" value="#{saxophone}"/>
    	<!-- <property name="instrument" ref="saxophone"/> -->
    </bean>
    <bean id="cerl" class="cn.com.jinlulu.pj.springinaction.Instrumentalist">
    	<property name="song" value="#{kenny.song}"/>
    </bean>
    <!-- spel还有一个强大功能引用方法 如果这个selectSong返回null,会报空指针异常-->
    <!-- <bean id="" class="">
    	<property name="song" value="#{songSelector.selectSong().toUpperCase()}"/>
    	这样不会报空指针异常意思就是selectSong()方法如果返回null就不调用toUpperCase()方法了
    	<property name="song" value="#{songSelector.selectSong()?.toUpperCase()}"/>
    </bean> -->
    <!-- spel调用类作用域的方法和常量 
    random()该方法返回一个无符号的double值,大于或等于0.0且小于1.0. -->
    <bean id="Math" class="cn.com.jinlulu.pj.springinaction.MathForMathod">
    	<property name="multiplier" value="#{T(java.lang.Math).PI}"/>
    	<property name="randomNumber" value="#{T(java.lang.Math).random()}"/>
    </bean>
    <!-- 做两个数字相加 当然乘法*除法/求余%也是可以用的,也可以用"1"+""这样连接字符串-->
    <!-- <bean id="" class="">
    	<property name="adjustAmount" value="#{counter.total+42}"/>
    </bean> -->
    <!-- 可以这样判断,返回的是布尔类型 -->
    <!-- < > <= >= ==都可以用,但是最好用SpEL文本格式lt gt le ge eq -->
   <!--  <bean id="" class="">
    	<property name="isEqual" value="#{counter.total == 42}"/>
    </bean> -->
    <!-- 可以使用 and or not或者! -->
    <!-- <bean id="" class="">
    	<property name="largeCircle" value="#{shape.kind=='circle' and shape.perimeter gt 10000}"/>
    </bean> -->
    <!-- 可以使用三元运算符 -->
    <!-- <bean id="" class="">
    	<property name="largeCircle" value="#{SongSelector.selectSong=='Jingle Bells'?piano:saxophone}"/>
    </bean> -->
    <!-- <bean id="" class="">
    	<property name="largeCircle" value="#{SongSelector.selectSong==null?SongSelector.selectSong:'saxophone'}"/>
    </bean> -->
    <!-- 这种方式可以写成下面这种 -->
    <!-- <bean id="" class="">
    	<property name="largeCircle" value="#{SongSelector.selectSong ?: 'saxophone'}"/>
    </bean> -->
    <!-- 表达list方式也可以这样用 -->
    <!-- <util:list id="cities">
    	<bean class="" p:name="111" p:state="GA" p:population="1145451"/>
    	<bean class="" p:name="121" p:state="GA" p:population="1145451"/>
    	<bean class="" p:name="113" p:state="GA" p:population="1145451"/>
    	<bean class="" p:name="211" p:state="GA" p:population="1145451"/>
    	<bean class="" p:name="131" p:state="GA" p:population="1145451"/>
    	<bean class="" p:name="112" p:state="GA" p:population="1145451"/>
    </util:list> -->
    <!-- <bean id="city" class="">
    	<property name="chosenCity" value="#{city[2]}"/>
    </bean> -->
    <!-- <bean id="city" class="">
    	<property name="chosenCity" value="#{city['111']}"/>
    </bean> -->
    <!-- 加载其他配置文件 -->
    <!-- setting Bean是一个java.util.Properties类这样就可以访问Properties的属性 -->
    <util:properties id="setting" location="classpath:setting.properties"/>
   <!--  <bean id="city" class="">
    	<property name="accessToken" value="#{settings['twitter.accessToken']}"/>
    </bean> -->
    <!-- systemEnvironment包含应用环境在机器上的所有环境变量 -->
    <bean id="homePath" class="">
    	<property name="homePath" value="#{systemEnvironment['HOME']}"></property>
    </bean>
    <!-- systemProperties包含了java应用程序启动时所设置的所有属性 -->
    <bean id="homePath2" class="">
    	<property name="homePath" value="#{systemProperties['application.home']}"></property>
    </bean>
    <!-- 查询人口多于1000的城市 -->
    <bean>
    	<property name="bigCities" value="#{cities.?[population gt 1000]}"></property>
    </bean>
    <!-- 查询出第一个匹配项 -->
    <bean>
    	<property name="aBigCity" value="#{cities.^[population gt 1000]}"></property>
    </bean>
    <!-- 查出最后一个匹配项 -->
    <bean>
    	<property name="aBigCity" value="#{cities.$[population gt 1000]}"></property>
    </bean>
    <!-- 投影集合 ![]-->
    <!-- 从集合的每个成员中选择特定的属性放在一个新的集合中 -->
    <!-- 一个仅仅包含城市名称的一个String类型的集合 -->
    <!-- 包含111 121 113等 -->
    <bean>
    	<property name="cityNames" value="#{cities.![name]}"></property>
    </bean>
    <!-- 也可以有多个 -->
    <bean>
    	<property name="cityNames" value="#{cities.![name+','+state]}"></property>
    </bean>
    <!-- 将人数多于1000的城市放入一个新的集合中 -->
    <bean>
    	<property name="cityNames" value="#{cities.?[population gt 1000].![name+','+state]}"></property>
    </bean>
</beans>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值