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 calledProperty date set 使用 byType:defalt Constructor calledProperty date setProperty hello set 使用 constructor:HelloDate(HelloBean,Date) called 使用 autodetect:defalt Constructor calledProperty date setProperty hello set 使用 dependency-check:defalt Constructor calledProperty date2 setProperty date setProperty 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。