注入Spring的bean的办法
Spring的注入:
(1)setter注入:
Spring中成员list,set,map,props的配置:
一>>>>list和数组的配置:无论类中的属性是一个list还是数组,均需要用<list></list>元素装载此属性
<property name="testList">
<list>
<value>test1</value>
<ref bean="test1">
</list>
</property>
在spring中使用hibernate持久化对象,需要配置一个LocalSessionFactoryBean,
这个类中有一个mappingResources属性,由利用list来组装所有的mappingResources文件。例:
<bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
<property name="mappingResources">
<list>
<value>/com/wes/spring/resource/Test1.hbm.xml</value>
<value>/com/wes/spring/resource/Test2.hbm.xml</value>
<value>/com/wes/spring/resource/Test3.hbm.xml</value>
</list>
</property>
</bean>
通过以上配置就达到了在sessionFactory中取到hbm配置文件的目的了。
二>>>>Set的配置:有时为了确保集合中数据的唯一性,需要用到一个java.util.Set的属性,具体配置如下:
<property name="testSet">
<set>
<value>test1</value>
<ref bean="test1"> <!-- 和list一样set可以装配任何属性的对象 -->
</set>
</property>
三>>>>Map属性:很多时候需要用map去存放一些key-->value对,这是java.util.Map类型的属性配置如下:
<property name="testMap">
<map>
<entry key="key1">
<value>test1</value>
</entry>
<entry key="key2">
<ref bean="test2">
</entry>
</map>
</property><!--目前Spring中只允许String类型的为主键-->
四>>>>Properties:java.util.Properties也能通过配置达到初始化的目的:
<property name="testProps">
<props>
<prop key="key1">test1</prop>
<prop key="key2">test2</prop>
</props><!-- 所有key value值均为String类型 -->
</property>
五>>>>设置null,明确将一个属性设置为null
<property name="test1"><null/></property>
注:setter注入的缺点是它假设了所有的可变属性都可以通过set方法访问到,也许你不希望自己的Bean是这样的。首先:
当一个bean实例化的时候,它的所有属性都没有设置,它会处于一个不确定状态。其次:有时候要求一些属性的值只能在创建的时候设置一次,以后就不能改变了。一种替代的方法是构造注入。
通常应用:一般在一些比较固定的场合应用,像数据源(DataSource),固定属性(性别),还有其他一些固定属性想配置进来的都可以。
(2)构造注入:
package com.wes.spring;
public class Test{
private String a;
private String b;
public Test(String a,String b) {this.a = a; this.b=b}
}
具体配置:
<bean id="test" class="com.wes.spring.Test">
<constructor-arg index="1">
<value>bbbb</value>
<constructor-arg>
<constructor-arg index="0">
<value>aaaa</value>
<constructor-arg>
</bean><!-- 当有多个参数时用index指定具体要赋的变量,index从0开始,也可以用type(变量类型)指定,但如果参数的类型一样时就没办法用type指定了 -->
本文地址:http://www.45fan.com/a/question/68171.html