首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

spring:简略的属性参考

2012-09-04 
spring:简单的属性参考在定义文件(XML配置文件)中定义Bean时,可以直接指定一个字符串值给属性值,如果在Bea

spring:简单的属性参考
在定义文件(XML配置文件)中定义Bean时,可以直接指定一个字符串值给属性值,如果在Bean定义文件中已经有一个定义的Bean实例,则可以直接让某个属性参考至这个实例。

有以下几种比较常用的方式:

1.使用<ref>直接指定参考至其他的Bean实例
2.使用<bean>标签并指定"class"属性来指定依赖对象
3.隐式自动绑定,分别是byType,byName将某个Bean实例绑定至其他Bean对应的属性
4.在构造方法上也能进行自动绑定
5.也可以设定"autodetect",一切交给Spring判定,自动完成。

以上几种注入方式注意事项如下:

1. <ref>方式:

    <ref bean="XXX"/>,XXX填写的字符需是你要依赖的bean文件中的id名字,有些书上也叫Bean别名。如<bean id="XXX" autowire="byType"> ,无需再指定属性参考而编写一个property,Spring会根据需要实现的Bean的setZzz()方法所接受的类型,来判断在Bean定义文件中是否定义有类似的类型对象,并将之设定给需要实现的Bean的setZzz()。使用自动绑定时,如果"byType"无法完成绑定,则抛出 org.springframework.beans.factory.Unsatisfied-DependencyException的异常。


3.2 byName方式:

    使用byName方式,类似的在<bean id="..." autowire="byName"> ,但是需要注意的是Spring要根据Bean定义时的"id"属性上指定的别名与Setter名称是否一致来进行自动绑定。如setDate()方法来完成依赖注入,必须修改一下需要注入的Bean的id值为"date"名称,即名字要相同。如果使用"byName"无法完成自动绑定,则对应的Setter仅维持未绑定状态。


4. constructor方法

    在构造方法上也可以尝试进行自动绑定。本人不是很推荐使用,因为这样很容易产生混乱,一边使用Type 3 Dependency Injection一边使用Type 2 Dependency Injection,使代码易读性下降不利于代码维护。有兴趣的朋友可以翻阅相关资料尝试。


5.autodetect方法

    类似第3方法,<bean id="..." autowire="autodetect"> ,这时候Spring会尝试使用如"autowire"被设定为"constructor"来处理依赖关系的建立,如果没有完成依赖关系建立,则再尝试使用如"autowire"被设定为"byType"的方式来建立依赖关系。这是比较傻瓜的一种自动检测方式,虽然方便但是不推荐使用,因为也是容易降低代码的可读性。




相关

    Spring自带一种依赖关系检测机制,由于很难从定义文件中看清楚是否每个属性都完成了设定,为了确定某些依赖关系确实建立,可以加入依赖检测,在<bean>标签使用时添加dependency-check="xxx",有四种检测方式:"simple"、"objects"、"all"、"none"。

    "simple":只检查简单的属性是否完成依赖关系,如原生数据类型或字符串对象
    "objects":检查对象类型的属性是否完成依赖关系
    "all":检查全部的属性是否完成依赖关系
    "none":默认值,不检查依赖关系

使用自动绑定时加入以来检测,如有未完成的依赖关系,则执行程序抛出 org.springframework.beans.factory.UnsatisfiedDependencyException异常。 

热点排行