`
gaoyuntao2005
  • 浏览: 303051 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

入门 09 - 属性参考与自动绑定

阅读更多

在定义Bean时,除了直接指定值给属性值之外,还可以直接参考定义档中的其它Bean,例如HelloBean是这样的话:

HelloBean.java

package onlyfun.caterpillar;

 

import java.util.Date;

 

public class HelloBean {

    private String helloWord = "Hello!World!";

    private Date date;

   

    public void setHelloWord(String helloWord) {

        this.helloWord = helloWord;

    }

    public String getHelloWord() {

        return helloWord + ":" + date.toString();

    }

    public void setDate(Date date) {

        this.date = date;

    }   

    public Date getDate() {

        return date;

    }

}


 我们的Bean定义档中,先定义了一个dateBean,之后helloBean可以直接参考至dateBean,Spring会帮我们完成这个依赖关系:

<?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="dateBean" class="java.util.Date"/>

   

    <bean id="helloBean" class="onlyfun.caterpillar.HelloBean">

        <property name="helloWord">

            <value>Hello!Justin!</value>

        </property>

        <property name="date">

            <ref bean="dateBean"/>

        </property>

    </bean>

</beans><?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="dateBean" class="java.util.Date"/>

   

    <bean id="helloBean" class="onlyfun.caterpillar.HelloBean">

        <property name="helloWord">

            <value>Hello!Justin!</value>

        </property>

        <property name="date">

            <ref bean="dateBean"/>

        </property>

    </bean>

</beans>


 直接指定值或是使用<ref>直接指定参考至其它的Bean,这种显式的关系指定是比较好的,不过Spring也支持隐式的自动绑定,您可 以透过类型(byType)或名称(byName)将Bean绑定至其它Bean上对应的属性,下面是个byType的例子:

<?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="dateBean" class="java.util.Date"/>

   

    <bean id="helloBean" class="onlyfun.caterpillar.HelloBean" autowire="byType">

        <property name="helloWord">

            <value>Hello!Justin!</value>

        </property>

       

    </bean>

</beans>


 在这边,我们并没有指定helloBean的Date属性,而是透过自动绑定,由于autowire指定了byType,所以会根据Date属性所接受的型态,判断BeanFactory中是否有类似的型态对象,并将之绑定至Date属性上。
 
 您也可以指定byName来绑定,则Spring会根据bean的别名与属性名称是否符合来进行自动绑定,举个例子来说,如果是byName而Date属性要完成依赖注入的话,则必须修改一下第一个Bean的id值为date:

<?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="date" class="java.util.Date"/>

   

    <bean id="helloBean" class="onlyfun.caterpillar.HelloBean" autowire="byName">

        <property name="helloWord">

            <value>Hello!Justin!</value>

        </property>

       

    </bean>

</beans>


 隐式的自动绑定没办法从定义档中,清楚的看到是否每个属性都完成设定,我们可以加入相依检查,在< bean>上加入dependency-check,有四种相依检查方式:simple、objects、all、none。第一个只检查简单的属性,像是原生(primitive)数据型态或字符串对象,objects检查对象属性,all则检查全部的属性,none是预设,表示不检查相依性。

 
 下面是一个设定的例子:

<?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="dateBean" class="java.util.Date"/>

   

    <bean id="helloBean" class="onlyfun.caterpillar.HelloBean" autowire="byType" dependency-check="all">

        <property name="helloWord">

            <value>Hello!Justin!</value>

        </property>

       

    </bean>

</beans>


 如果相依检查发现有未完成的依赖关系,则运行时会丢出UnsatisfiedDependencyException。

分享到:
评论

相关推荐

    Oracle11g从入门到精通2

    《Oracle11g从入门到精通》面向数据库管理人员和数据库开发人员,从实际角度出发,系统地介绍了数据库和Oracle的相关概念和原理、Oracle的数据库管理(如安装与启动,用户权限、备份与恢复等),以及Oracle的应用...

    spring security 参考手册中文版

    Spring Security 参考 1 第一部分前言 15 1.入门 16 2.介绍 17 2.1什么是Spring Security? 17 2.2历史 19 2.3版本编号 20 2.4获得Spring安全 21 2.4.1使用Maven 21 Maven仓库 21 Spring框架 22 2.4.2 Gradle 23 ...

    Visual C#2010 从入门到精通(Visual.C#.2010.Step.By.Step).完整去密码锁定版 I部分

    15.5 生成自动属性 277 15.6 使用属性来初始化对象 279 第15章快速参考 283 第16章 使用索引器 285 16.1 什么是索引器 285 16.1.1 没有使用索引器的例子 285 16.1.2 使用索引器的同一个例子 287 16.1.3 理解...

    Oracle11g从入门到精通

    《Oracle11g从入门到精通》面向数据库管理人员和数据库开发人员,从实际角度出发,系统地介绍了数据库和Oracle的相关概念和原理、Oracle的数据库管理(如安装与启动,用户权限、备份与恢复等),以及Oracle的应用...

    SVN使用手册中文版快速入门

    自动属性设置 Peg和实施修订版本 外部定义 卖主分支 常规的卖主分支管理过程 svn_load_dirs.pl 本地化 理解地区 Subversion对地区的支持 Subversion版本库URL 8. 开发者信息 分层的库设计 版本库层 版本库访问层 RA-...

    springboot参考指南

    在构建时期自动扩展info属性 ii. 40.4.2. Git提交信息 iii. 41. 基于HTTP的监控和管理 i. 41.1. 保护敏感端点 ii. 41.2. 自定义管理服务器的上下文路径 iii. 41.3. 自定义管理服务器的端口 iv. 41.4. 自定义管理...

    java 编程入门思考

    3.1.4 自动递增和递减 3.1.5 关系运算符 3.1.6 逻辑运算符 3.1.7 按位运算符 3.1.8 移位运算符 3.1.9 三元if-else运算符 3.1.10 逗号运算符 3.1.11 字串运算符+ 3.1.12 运算符常规操作规则 3.1.13 造型运算符 3.1.14...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个...

    HibernateAPI中文版.chm

    Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个...

    Java初学者入门教学

    3.1.4 自动递增和递减 3.1.5 关系运算符 3.1.6 逻辑运算符 3.1.7 按位运算符 3.1.8 移位运算符 3.1.9 三元if-else运算符 3.1.10 逗号运算符 3.1.11 字串运算符+ 3.1.12 运算符常规操作规则 3.1.13 造型运算符 3.1.14...

    hibernate3.2中文文档(chm格式)

    Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个...

    hibernate 体系结构与配置 参考文档(html)

    1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第...

    Websphere MQ入门教程

    进一步参考资料 10 第一部分 Websphere MQ原理和体系结构 11 第一章Websphere MQ原理 11 目标 11 1.1中间件 11 1.1.1中间件的优点 11 1.1.2中间件的分类 12 1.2三种通信技术的比较 13 1.3 WebSphere MQ的原理 15 1.4...

    Grails 技术精解与Web开发实践【源码+样章】----下载不扣分,回帖加1分,欢迎下载,童叟无欺

    13.1 Controller中常用的属性与方法 161 13.2 自定义URL Mapping 164 13.3 Web Flow 167 13.4 本章小结 172 第14章 深入Groovy Server Page 174 14.1 GSP基础知识 174 14.1.1 GSP输出表达式 174 14.1.2 GSP中预定义...

    Grails 中文参考手册

    3.3.3 自动数据库移植 3.4 外部配置 3.5 定义版本 4. 命令行 4.1 创建Gant脚本 4.2 可复用的Grails脚本 4.3 脚本中的事件 4.4 Ant和Maven 5. 对象关系映射(GORM) 5.1 快速指南 5.1.1 基本的CRUD 5.2 在GORM中进行...

    db2数据库入门教程(官方中文版)

    1.6 DB2 版本号与 DB2 版本分类........................................................................................16 1.7升级到其它的 DB2版本...........................................................

    Hibernate参考文档

    1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第...

    asp.net知识库

    利用反射实现ASP.NET控件和数据实体之间的双向绑定,并且在客户端自动验证输入的内容是否合法 asp.net报表解决方法 SQLDMO类的使用 SQL过程自动C#封装,支持从表到基本存储过程生成 使用SQLDMO控制 SQL Server 使用SQL...

Global site tag (gtag.js) - Google Analytics