分享
 
 
 

快速上手Spring--11. 自动绑定和依赖检查

王朝java/jsp·作者佚名  2006-01-30
窄屏简体版  字體: |||超大  

这篇文章来谈谈《Spring Framework 开发参考手册》的3.3.5小节中的“自动装配协作对象”和3.3.6 小节中的“依赖检查”。

仔细看看文档,相关配置见前面文章。

先建立一个包:javamxj.spring.basic.autowiring ,然后把以下4个文件放在这个包下。

· HelloBean,一个简单的Bean,含有一个属性hello。

HelloBean.java

package javamxj.spring.basic.autowiring;

public class HelloBean {

private String hello;

public String getHello() {

return hello;

}

public void setHello(String hello) {

this.hello =

hello;

}

}

· HelloDate类先定义了三个构造函数,然后设置了三个属性:hello、date、date2。

HelloDate.java

package javamxj.spring.basic.autowiring;

import java.util.Date;

import java.util.GregorianCalendar;

public class HelloDate {

public

HelloDate() {

System.out.println("defalt Constructor called");

}

public

HelloDate(HelloBean hello) {

System.out.println("HelloDate(HelloBean) called");

}

public

HelloDate(HelloBean hello, Date date) {

System.out.println("HelloDate(HelloBean,Date) called");

}

public void setHello(HelloBean hello)

{

System.out.println("Property hello set");

}

public void setDate(Date date) {

System.out.println("Property date set");

}

public void setDate2(GregorianCalendar date)

{

System.out.println("Property date2 set");

}

}

· beans.xml中定义了七个bean,

beans.xml

<?xml version="1.0" encoding="GBK"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

<bean id="date" name="myDate" class="java.util.Date"/>

<bean id="helloBean" class="javamxj.spring.basic.autowiring.HelloBean"

dependency-check="simple">

<property name="hello" value="javamxj"/>

</bean>

<bean id="HelloByName" class="javamxj.spring.basic.autowiring.HelloDate"

autowire="byName"/>

<bean id="HelloByType" class="javamxj.spring.basic.autowiring.HelloDate"

autowire="byType"/>

<bean id="HelloConstructor" class="javamxj.spring.basic.autowiring.HelloDate"

autowire="constructor"/>

<bean id="HelloAutodetect" class="javamxj.spring.basic.autowiring.HelloDate"

autowire="autodetect"/>

<bean id="helloCheck" class="javamxj.spring.basic.autowiring.HelloDate" autowire="byType"

dependency-check="objects">

<property name="date2" >

<bean class="java.util.GregorianCalendar"/>

</property>

<!-- <property name="date" ref="date"/>-->

<!-- <property name="hello" ref="helloBean"/>-->

</bean>

</beans>

Main.java

package javamxj.spring.basic.autowiring;

import org.springframework.beans.factory.BeanFactory;

import org.springframework.beans.factory.xml.XmlBeanFactory;

import org.springframework.core.io.ClassPathResource;

public class Main {

public static void main(String[] args) {

BeanFactory bf = new

XmlBeanFactory(new

ClassPathResource(

"javamxj/spring/basic/autowiring/beans.xml"));

System.out.println("使用 byName:");

HelloDate hb =

(HelloDate) bf.getBean("HelloByName");

System.out.println("\n使用 byType:");

hb = (HelloDate)

bf.getBean("HelloByType");

System.out.println("\n使用 constructor:");

hb = (HelloDate)

bf.getBean("HelloConstructor");

System.out.println("\n使用 autodetect:");

hb = (HelloDate)

bf.getBean("HelloAutodetect");

System.out.println("\n使用 dependency-check:");

hb =

(HelloDate) bf.getBean("helloCheck");

}

}

运行结果:

使用 byName:

defalt Constructor called

Property

date set

使用 byType:

defalt Constructor called

Property

date set

Property hello set

使用 constructor:

HelloDate(HelloBean,Date)

called

使用 autodetect:

defalt Constructor called

Property

date set

Property hello set

使用 dependency-check:

defalt Constructor

called

Property date2 set

Property date set

Property hello

set

参考运行结果,详细说明一下beans.xml的配置:

· HelloByName指定了autowire="byName",则Spring会根据bean的名称与属性名称是否符合来进行自动绑定。如这里HelloDate含有属性:hello、date、date2,在beans.xml中包含了date、helloBean两个bean,所以只有date符合要求。(bean的名称包括Id名称和name名称)

· HelloByType指定了autowire="byType",这里HelloDate含有属性:hello、date、date2,在beans.xml中包含了Date类和HelloBean类,分别匹配date和hello属性。

· HelloConstructor指定了autowire="constructor",它会优先调用含有较多参数的构造函数。

· HelloAutodetect指定了autowire="autodetect",如果找到了一个缺省的构造函数,则会应用byType。

· helloBean中指定了dependency-check="simple",则会对基本类型和集合进行依赖检查。这里如果不对属性hello进行赋值,就会抛出一个异常。

· helloCheck中指定了dependency-check="objects",同时也指定了autowire="byType",虽然会自动绑定属性date和hello,但由于属性date2没有被自动绑定到,所以需要特别设置。

这篇文章源代码下载(不包含库文件):http://free.ys168.com/?javamxj

Spring目录下面的SpringBasic.zip。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有