Spring 专题
专题目录
您的位置:java > Spring专题 > Spring由类型(Type)自动装配
Spring由类型(Type)自动装配
作者:--    发布时间:2019-11-20
在spring中,“类型自动装配”的意思是如果一个bean的数据类型与其它bean属性的数据类型相同,将自动兼容装配它。
例如,一个“persion” bean 公开以“ability”类数据类型作为属性,spring会找到ability类相同的数据类型,并自动装配它的bean。如果没有匹配找到,它什么也不做。
可以通过自动装配 autowire="bytype"象下面这样:
<!-- person has a property type of class "ability" -->
	<bean id="person" class="com.h3.common.person" autowire="bytype" />
		
	<bean id="invisible" class="com.h3.common.ability" >
		<property name="skill" value="invisible" />
	</bean>
看下面由spring按类型自动装配的完整例子。

1. beans

两个bean,person 和 ability.
package com.h3.common;
 
public class person 
{
	private ability ability;
	//...
}
package com.h3.common;
 
public class ability 
{
	private string skill;
	//...
}

2. spring wiring

通常情况下,明确地装配 bean:
<bean id="person" class="com.h3.common.person">
		<property name="ability" ref="invisible" />
	</bean>
	
	<bean id="invisible" class="com.h3.common.ability" >
		<property name="skill" value="invisible" />
	</bean>

输出

person [ability=ability [skill=invisible]]
随着自动装配按类型启用后,可以保留ability属性未设置。spring会发现相同的数据类型并自动装配它。
<bean id="person" class="com.h3.common.person" autowire="bytype" />
	
	<bean id="invisible" class="com.h3.common.ability" >
		<property name="skill" value="invisible" />
	</bean>

输出

person [ability=ability [skill=invisible]]
如果你有两个bean,都是类“ability”相同的数据类型?
<bean id="person" class="com.h3.common.person" autowire="bytype" />
	
	<bean id="steal" class="com.h3.common.ability" >
		<property name="skill" value="steal" />
	</bean>
	
	<bean id="invisible" class="com.h3.common.ability" >
		<property name="skill" value="invisible" />
	</bean>

输出

exception in thread "main" org.springframework.beans.factory.unsatisfieddependencyexception: 
...
no unique bean of type [com.h3.common.ability] is defined: 
expected single matching bean but found 2: [steal, invisible]; nested exception is 
org.springframework.beans.factory.nosuchbeandefinitionexception: 
no unique bean of type [com.h3.common.ability] is defined: 
expected single matching bean but found 2: [steal, invisible]
在这种情况下,它会打出 unsatisfieddependencyexception 的错误消息。

在类型的自动装配模式,就必须确保只有bean 只有一个唯一的数据类型声明。

下载源代码 – http://pan.baidu.com/s/1gdqfszd

网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册