快速业务通道

详解Spring 3.0基于Annotation的依赖注入实现 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
而不是判 断字段是否已经存在值了。Spring 进行依赖检查时,只会判断属性是否使用了 Setter 注入。如果某个 属性没有使用 Setter 注入,即使是通过构造函数已经为该属性注入了值,Spring 仍然认为它没有执行 注入,从而抛出异常。另外,Spring 只管是否通过 Setter 执行了注入,而对注入的值却没有任何要求 ,即使注入的 <null/>,Spring 也认为是执行了依赖注入。

<bean> 标签提供了 dependency-check 属性用于进行依赖检查。该属性的取值包括以下几种:

none -- 默认不执行依赖检查。可以在 <beans> 标签上使用 default-dependency-check 属性 改变默认值。

simple -- 对原始基本类型和集合类型进行检查。

objects -- 对复杂类型进行检查(除了 simple 所检查类型之外的其他类型)。

all -- 对所有类型进行检查。

旧版本使用 dependency-check 在配置文件中设置,缺点是粒度较粗。使用 Spring2.0 提供的 @Required 注解,提供了更细粒度的控制。@Required 注解只能标注在 Setter 方法之上。因为依赖注入 的本质是检查 Setter 方法是否被调用了,而不是真的去检查属性是否赋值了以及赋了什么样的值。如果 将该注解标注在非 setXxxx() 类型的方法则被忽略。

为了让 Spring 能够处理该注解,需要激活相应的 Bean 后处理器。要激活该后处理器,只需在 XML 中增加如下一行即可。

<context:annotation-config/>

当某个被标注了 @Required 的 Setter 方法没有被调用,则 Spring 在解析的时候会抛出异常,以提 醒开发者对相应属性进行设置。

使用 @Resource、@Autowired 和 @Qualifier 指定 Bean 的自动装配策略

自动装配是指,Spring 在装配 Bean 的时候,根据指定的自动装配规则,将某个 Bean 所需要引用类 型的 Bean 注入进来。<bean> 元素提供了一个指定自动装配类型的 autowire 属性,该属性有如 下选项:

no -- 显式指定不使用自动装配。

byName -- 如果存在一个和当前属性名字一致的 Bean,则使用该 Bean 进行注入。如果名称匹配但是 类型不匹配,则抛出异常。如果没有匹配的类型,则什么也不做。

byType -- 如果存在一个和当前属性类型一致的 Bean ( 相同类型或者子类型 ),则使用该 Bean 进 行注入。byType 能够识别工厂方法,即能够识别 factory-method 的返回类型。如果存在多个类型一致 的 Bean,则抛出异常。如果没有匹配的类型,则什么也不做。

constructor -- 与 byType 类似,只不过它是针对构造函数注入而言的。如果当前没有与构造函数的 参数类型匹配的 Bean,则抛出异常。使用该种装配模式时,优先匹配参数最多的构造函数。

详解Spring 3.0基于Annotation的依赖注入实现(4)

时间:2011-08-13 IBM 张建平

autodetect -- 根据 Bean 的自省机制决定采用 byType 还是 constructor 进行自动装配。如果 Bean 提供了默认的构造函数,则采用 byType;否则采用 constructor 进行自动装配。

当使用 byType 或者 constructor 类型的自动装配的时候,自动装配也支持引用类型的数组或者使用 了泛型的集合,这样,Spring 就会检查容器中所有类型匹配的 Bean,组成集合或者数组后执行注入。对 于使用了泛型的 Map 类型,如果键是 String 类型,则 Spring 也会自动执行装配,将所有类型匹配的 Bean 作为值,Bean 的名字作为键。

我们可以给 <beans> 增加 default-autowire 属性,设置默认的自动封装策略。默认值为"no" 。如果使用自动装配的同时,也指定了 property 或者 constructor-arg 标签,则显式指定的值将覆盖 自动装配的值。目前的自动封装不支持简单类型,比如基本类型、String、Class,以及它们的数组类型 。

在按类型匹配的时候 ( 可能是 byType、constru

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号