属性值的配置方式
IoC可以通过两种方式注入依赖的属性,即setter方法和构造器方法。
不论是setter方法还是构造器方法,都需要为方法制定具体的参数值为属性赋值。
参数值有不同的类型,可以分为以下三种情况:
1、基本数据类型和Stirng类型
基本数据类型包括:byte、short、int、long、float、double、char、boolean以及对应的包装器类。
当值的类型是基本类型或者String类型时,可以使用<value>元素配置值。
2、其他bean类型
属性除了可以使基本类型或者Sring类型,还可能是其他类的类型。
public class Order{
private String id;
private Customer customer;
}
上述代码中,Order类的属性customer是Customer类型,也就是说Order的customer属性类型是其他bean。
在这种情况下,需要实例化一个Customer类型的bean,然后在Order中通过ref引用这个bean。
<bean id="customer" class="vo.Customer">
<property name="custid">
<value>1</value>
</property>
<property name="custname">
<value>John</value>
</property>
</bean>
<bean id="cart" class="vo.Order">
<property name="custid">
<value>1</value>
</property>
<property name="custname">
<ref bean="customer"/>
</property>
</bean>
上述配置中先实例化了一个id值为customer的Customer类型bean,然后再Order的配置中通过
<ref bean="customer">将其复制给Order的customer属性,也就是Order引用了Customer类型的bean。
3、null值
如果需要为某个属性指定null值,可以使用如下配置:
<property name="name">
<null></null>
</property>
或者
<property name="name">
<null/>
</property>
值得注意的是如果使用下面的配置,则不是空值而是空字符串:
<property name="name">
<value></value>
</property>
在实际应用中,类和类之间可能是一对多的关联关系,那么就需要使用集合类型来持有“多”的一方的对象。
例如,存在Order类和Item类,Order类中关联多个Item实例,因此使用List集合来实现这样的一对多关联关系:
public class Order{
private String id;
private Customer customer;
private List<Item> items;
}
当类的属性是集合类型时,也可以使用IoC进行注入。
常用的集合类型有四种,即List、Set、Map以及Properties。
1、<list>
<bean id="item1" class="cart.Item">
<property name="itemid">
<value>1</value>
</property>
<property name="name">
<null/>
</property>
<property name="price">
<value>34.5</value>
</property>
</bean>
<bean id="item2" class="cart.Item">
<property name="itemid">
<value>2</value>
</property>
<property name="name">
<value>DVD</value>
</property>
<property name="price">
<value>23</value>
</property>
</bean>
<bean id="cart" class="cart.Order">
<property name="itemid">
<value>1</value>
</property>
<property name="customer">
<ref bean="customer">
</property>
<property name="items">
<list>
<ref bean="item1"/>
<ref bean ="item2"/>
</list>
</property>
</bean>
上述配置中,首先创建了两个Item类的bean,分别为item1和item2.
在cart的配置中,使用<list>元素将item1和item2添加到集合items中,赋值给属性items。
2、<set>
当集合采用Set类型的集合类时,则采用<set>元素进行装配,用法与<list>相同。
3、<map>
当集合采用Map类型的映射类时,则采用<map>元素进行装配。
<bean>
<property name="">
<map>
<entry>
<key>
<value>
</value>
</key>
<ref/>
</entry>
</map>
</propety>
</bean>
<map>元素下可以有多对<entry></entry>条目元素,每个条目配置Map的一对键值对。
其中<key>用来配置当前条目的键值,<key>元素内可以使用<value>、<ref>、<list>、<set>等各种类型元素。
键值对中的值也可以是<value>、<ref>、<list>、<set>等各种类型元素。
4、<props>
如果集合采用Properties类型,则使用<props>进行配置。
<bean>
<property name="">
<props>
<prop key=""></prop>
<prop key=""></prop>
</props>
</property>
</bean>
<props>的每个条目都只接受字符串类型的值,不能使用其他类型。