4.4用ref的属性指定依赖的3U模?br />
(1) 用local属性指?br />
如果一个Bean与被参考引用的Bean在同一个XML文g中而且被参考引用的Bean是用id来命名的Q那么就可以使用ref的local属?q样?x)XML
解释器更早地在XML文解释Ӟ验证Bean的id.local属性的值必M被参考引用的Bean的id属性一?/p>
4.5 Bean自动装配?U模?br />
(1)使用byName模式
byName模式指的是通过Bean的属性名字进行自动装配。在Spring的配|文档XML中,查找一个与要装配的属性同名字的Bean.
在配|文中Q有一个id为HelloWorld的Bean被设|ؓ(f)通过byName自动装配QHelloworld.java包含一个date变量QSpring׃(x)查找一个叫
做date的Bean定义Q然后用它来讄date属性?br />
****HelloWorld*****
package com.gc.action;
import java.util.Date;
public class HelloWorld{
private String msg=null;
private Date date=null;
public void setMsg(String msg){
this.msg=msg;
}
public String getMsg(){
return this.msg;
}
public void setDate(Date date){
this.date=date;
}
public Date getDate(){
return this.date;
}
}
配置文档config.xml
<?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="HelloWorld" class="com.gc.action.HelloWorld" autowire="byName">
<property name="msg">
<value>HelloWorld</value>
</property>
</bean>
<bean id="date" class="java.util.Date"/>
<beans>
(2)使用ByType模式
byType模式指的是如果XML中正好有一个与cd一L(fng)Bean,p动装配这个属性。如果有多于一个这L(fng)Bean,抛Z个异常,指出?/p>
能不能对那个Bean使用byType的自动装配?/p>
在配|文中Q有一个id为HelloWorld的Bean被设|ؓ(f)通过byType自动装配QHelloworld.java包含一个date变量QSpring׃(x)查找一个类
型ؓ(f)date的Bean定义Q然后用它来讄date属性?br />
****HelloWorld*****
同上
配置文config.xml
<?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="HelloWorld" class="com.gc.action.HelloWorld" autowire="byType">
<property name="msg">
<value>HelloWorld</value>
</property>
</bean>
<bean id="date" class="java.util.Date"/>
<beans>
(3)使用constructor模式
constructor模式指的是Ҏ(gu)构造函数的参数q行自动装配。在配置文中,有一个id为HelloWorld的Bean被设|ؓ(f)通过constructor自动
装配QHelloWorld.java包含一个构造函数方法,spring׃(x)Ҏ(gu)构造函数的参数查找合适类型的Bean定义Q然后用它来讄购置函数的参数的
倹{?br />
****HelloWorld*****
package com.gc.action;
import java.util.Date;
public class HelloWorld{
private String msg=null;
private Date date=null;
public HelloWorld(Date date)
this.date=date;
}
public void setMsg(String msg){
this.msg=msg;
}
public String getMsg(){
return this.msg;
}
public void setDate(Date date){
this.date=date;
}
public Date getDate(){
return this.date;
}
}
配置文config.xml
<?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="HelloWorld" class="com.gc.action.HelloWorld" autowire="constructor">
<property name="msg">
<value>HelloWorld</value>
</property>
</bean>
<bean id="date" class="java.util.Date"/>
<beans>
(4)autodetect模式指的是通过对Bean(g)查类的内部来选择constructor或byType.如果先找到constructorqconstructorQ如果没?/p>
constructor,而找到byType,qbyType.
****HelloWorld****
同上(3)
配置文gconfig.xml
autowire="autodetect"
(5)no模式指的是不用自动装配?br />
****HelloWorld****
同上(3)
配置文gconfig.xml
autowire="no"
结:对于大型的应用,不鼓׃用自动装配,因ؓ(f)它去除了参考依赖的透明性和清晰性。有了自动装配后Q可以减开发h员的输入问题Q但
是却使开发h员很隄出Bean的每个属性都是否讑֮完成?br />
完成
4.6 Bean依赖(g)查的4U模?br />
像自动装配功能一P依赖(g)查能够分别对每一个Bean应用或取消应用。默认的是不(g)查依赖关pR用Bean元素的dependency-check属?/p>
来指定Bean定义的依赖检查共?U模式:(x)simple.object.all.none
借助依赖(g)查来实现查看Bean的每个属性是否都讑֮完成的功?br />
(1)使用simple模式
simple模式指的是对基本cdQ字W串和集合进行依赖检查?br />
<?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="HelloWorld" class="com.gc.action.HelloWorld" autowire="autodetect" dependency-check="simple">
</bean>
<bean id="date" class="java.util.Date"/>
</beans>
(2)使用object模式
object模式指的是对依赖对象q行依赖(g)?
<?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="HelloWorld" class="com.gc.action.HelloWorld" autowire="autodetect" dependency-check="object">
</bean>
<bean id="date" class="java.util.Date"/>
</beans>
(3)使用all模式
all模式的是对全部属性进行依赖检?br />
<?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="HelloWorld" class="com.gc.action.HelloWorld" autowire="autodetect" dependency-check="all">
</bean>
<bean id="date" class="java.util.Date"/>
</beans>
(4)使用none模式
none模式指的是不q行依赖(g)?br />
<?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="HelloWorld" class="com.gc.action.HelloWorld" autowire="autodetect" dependency-check="none">
</bean>
<bean id="date" class="java.util.Date"/>
</beans>
结Q一般情况下Q依赖检查和自动装配l合使用。当开发h员想看Bean的每个属性是否都讑֮完成的时候,依赖(g)查的作用昑־更大。当?/p>
赖检查和自动装配l合使用Ӟ依赖(g)查会(x)在自动装配完后发生。当Bean的属性都有默认的|或者不需要对Bean的属性是否都被设|到Bean
上检查时Q依赖检查的作用׃是很大了Q?/p>
4.7 集合的注入方?br />
(1).List
****HelloWorld****
package com.gc.action;
public class HelloWorld{
private List msg=null;
public void setMsg(List msg){
this.msg=msg;
}
public List getMsg(){
return this.msg;
}
}
配置文
<beans>
<bean id="HelloWorld" class=com.gc.action.HelloWorld">
<property name="msg">
<list>
<value>gf</value>
<value>gd</value>
<value>HelloWorld</value>
</list>
</property>
<beans>
(2).Set
****HelloWorld****
package com.gc.action;
public class HelloWorld{
private Set msg=null;
public void setMsg(Set msg){
this.msg=msg;
}
public Set getMsg(){
return this.msg;
}
}
配置文
<beans>
<bean id="HelloWorld" class=com.gc.action.HelloWorld">
<property name="msg">
<set>
<value>gf</value>
<value>gd</value>
<value>HelloWorld</value>
</set>
</property>
<beans>
(3).Map
****HelloWorld****
package com.gc.action;
public class HelloWorld{
private Map msg=null;
public void setMsg(Map msg){
this.msg=msg;
}
public Map getMsg(){
return this.msg;
}
}
配置文
<beans>
<bean id="HelloWorld" class=com.gc.action.HelloWorld">
<property name="msg">
<Map>
<entry key="gf">
<value>HelloWorld</value>
</entry>
<entry key="gd">
<value>HelloWorld</value>
</entry>
</Map>
</property>
<beans>
(4).Properties
****HelloWorld****
package com.gc.action;
public class HelloWorld{
private Properties msg=null;
public void setMsg(Properties msg){
this.msg=msg;
}
public Properties getMsg(){
return this.msg;
}
}
配置文档
<beans>
<bean id="HelloWorld" class=com.gc.action.HelloWorld">
<property name="msg">
<props>
<prop key="gf">HelloWorld</prop>
<prop key="gd">HelloWorld</prop>
</props>
</property>
<beans>
结Q对于List.set.Map和Properties来说都是cM的,是都要把要注入的信息注入到集合中去Q然后在把集合注入到相关的Bean?

]]>