这篇文章来谈谈
《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,
<?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没有被自动绑定到,所以需要特别设置。
分享到:
相关推荐
英飞凌tc26x快速入门,TASKING教程,tc26x系列的单片机
Ucinet软件快速入门上手-网络分析软件.pdf
Origin8.0简明教程--快速上手.pdf )Origin8.0简明教程--快速上手.pdf )Origin8.0简明教程--快速上手.pdf )
Ucinet软件快速入门上手-网络分析软件.doc
wine,可以快速使用的工具,可以上手试一试
Spire.Doc-FE_2.7.3.jar,是一款java生成word的工具类,可以很方便的提供word的各种各样的操作,还有在线说明文档 ...基本操作都有java demo,所以很好上手。
我们对Spring平台和第三方库进行了一种自以为是的观点,这样您就可以轻松上手了。大多数Spring Boot应用程序只需要很少的Spring配置。 您可以使用Spring Boot创建可以使用java -jar或更传统的war部署启动的Java应用...
WinSCP-5.11.2.7781p.zip ,简单方便,中文汉化,新手上手快
JDOM处理XML快速上手 - Web UI Design - JavaEye技术网站.mht
项目一--Photoshop-CS6快速上手.ppt
010 - Spark框架 - 快速上手 - WordCount - 日志和错误.avi 011 - Spark框架 - 运行环境 - 本地环境 - 基本配置和操作.avi 012 - Spark框架 - 运行环境 - 本地环境 - 提交应用程序.avi 013 - Spark框架 - 运行环境 -...
简单的学习项目 适合刚上手的小白 有问题欢迎交流
Apache Avro 是类似于 Google protobuf 那样的数据交换协议,但 Avro 可以用 JSON 格式来定义 Schema, 所以相比而言更容易上手。它也是 Hadoop, Kafka 所采用的交换格式。对于生成的 avro 序列化文件如果要编写代码...
ApacheFTPServer,搭建环境方便快捷,快速上手
非常棒的一套Spring实战课程,课程由经验非常丰富的架构师带领同学们,手把手的学习Spring技术,同时课程适合各个阶段的人群进行学习,非常的不错。 视频大小:4.5G
此外,它还具有良好的用户界面和易用的导航菜单,使得用户可以快速上手并轻松地进行项目管理。由于其源代码开放,因此学生可以根据自己的需求进行定制和扩展,以实现更加个性化的功能。总之,JavaPMS-1.2-beta.zip是...
PPT技能培训(上手篇+进阶篇)2020.03.11-压缩-只读.pptx
Greenplum是一个面向数据仓库应用的关系型数据库,它基于流行的PostgreSQL开发,因为有良好的体系结构,所以在数据存储,高并发,高可用,线性...在功能和语法上,要比Hadoop上的SQL引擎Hive好用很多,普通用户更加容易上手。
包含:Ajax中文手册(快速上手).chm---CSS.chm---Hibernate_3.2.0_Reference_zh_CN.chm---J2EE完全参考手册-J2EE概述.pdf----Javascript高级教程.CHM---javaWeb.chm--JBPM工作流开发指南 .pdf---JSF中文教程.chm---JSP...