Spring IoC(控制反转)【二】

属性值的配置方式

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>的每个条目都只接受字符串类型的值,不能使用其他类型。





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值