1.在应用中,我们常常使用<ref>标签为JavaBean注入它依赖的对象,同时也Spring为我们提供了一个自动装配的机制,在定义Bean时,<bean>标签有一个autowire属性,我们可以通过指定它来让容器为受管JavaBean自动注入依赖对象。<bean>的autowire属性有如下六个取值,他们的说明如下:

1、 No:即不启用自动装配。Autowire默认的值。之所以它的默认值为NO,那是因为这会破坏模块关系的可读性,spring的reference也建议不用autoware,原文如下: Note: as has already been mentioned, for larger applications, it is discouraged to use autowiring because it removes the transparency and the structure from your collaborating classes.

2、 byName:根据属性名自动装配。此选项将检查容器并根据名字查找与属性完全一致的bean,并将其与属性自动装配。 如: <bean id="userManagerTarget" autowire="byName">      <property name="baseDAO"/> </bean>    这样对于bean userManagerTarget的属性baseDAO,spring就会自动去引用同名的bean,也就是上面的声明和下面是等价的: <bean id="userManagerTarget" autowire="no">      <property name="baseDAO">         <ref local="baseDAO"/>      </property> </bean>

3、 byType:如果容器中存在一个与指定属性类型相同的bean,那么将与该属性自动装配;如果存在多个该类型bean,那么抛出异常,并指出不能使用byType方式进行自动装配;如果没有找到相匹配的bean,则什么事都不发生,也可以通过设置dependency-check="objects"让Spring抛出异常。

4、 constructor:与byType方式类似,不同之处在于它应用于构造器参数。如果容器中没有找到与构造器参数类型一致的bean, 那么抛出异常。 reference原文是: This is analogous to byType, but applies to constructor arguments. If there isn't exactly one bean of the constructor argument type in the bean factory, a fatal error is raised.

5、 autodetect:通过bean类的内省机制(introspection)来决定是使用constructor还是byType方式进行自动装配。如果发现默认的构造器,那么将使用byType方式,否则采用 constructor。 原文如下: Chooses constructor or byType through introspection of the bean class. If a default constructor is found, byType gets applied.

6、 default:由上级标签<beans>的default-autowire属性确定。

注意:在配置bean时,<bean>标签中Autowire属性的优先级比其上级标签高,即是说,如果在上级标签中定义default-autowire属性为byName,而在<bean>中定义为byType时,Spring IoC容器会优先使用<bean>标签的配置。

小结:使用自动装配,配置文件简洁了许多。但是,自动装配并不是十全十美的,我们不论是使用byName还是byType的方法,Spring不一定就能很准确的为我们找到JavaBean依赖的对象。在这种情况下,你务必遵守javabean的命名规范,另外,如果使用自动装配,Spring配置文件的可读性也大大降低,我们不能很容易的看出个bean之间的依赖关系,这也在一定程度上降低了程序可维护性;也容易造成潜在的错误,比如说通过byName来装配,如果将属性 名字改了后,Spring就不会将其自动装配给Bean的属性了。

因此在使用自动装配时,应当权衡利弊,合理的与ref的方法相结合,尽量在降低工作量的同时,保证应用的可维护度。但是spring的reference还是不推荐在定义中用这个功能

转载于:https://www.cnblogs.com/cyjch/archive/2012/02/06/2340411.html

Spring Autowire自动装配相关推荐

  1. Spring autowire 自动装配简介

    Spring autowire 自动装配简介 注意本文与一般spring 标注@Autowire 无关 如下例子定义了3个类 Dperson Dcar & Daddress 其中Dperson ...

  2. Spring Autowire自动装配(转http://lep1985520.blog.163.com/blog/static/56600480200901441338486/)

    Spring Autowire自动装配 技术收藏 2009-01-14 16:13:38 阅读284 评论0   字号:大中小 订阅 Spring Autowire自动装配   在应用中,我们常常使用 ...

  3. Spring Autowire自动装配 ---残梦追月原创

    在应用中,我们常常使用<ref>标签为JavaBean注入它依赖的对象.但是对于一个大型的系统,这个操作将会耗费我们大量的资源,我们不得不花费大量的时间和精力用于创建和维护系统中的< ...

  4. Spring Autowire自动装配介绍

    在应用中,我们常常使用<ref>标签为JavaBean注入它依赖的对象.但是对于一个大型的系统,这个操作将会耗费我们大量的资源,我们不得不花费大量的时间和精力用于创建和维护系统中的< ...

  5. (Spring)自动装配bean

    文章目录 自动装配bean 1. 环境搭建 2. byName自动装配 3. byType自动装配 4. 使用注解自动装配 4.1 @Autowired和@Qualifier 4.2 @Resourc ...

  6. Spring学习——自动装配

    自动装配说明 自动装配是使用spring满足bean依赖的一种方法 spring会在应用上下文中为某个bean寻找其依赖的bean. Spring中bean有三种装配机制,分别是: 在xml中显式配置 ...

  7. Spring之自动装配

    Spring中有四种自动装配类型,分别为:byName,byType,constructor,autodetect,下面来分别介绍一下这些是如何自动装配的 <bean id="foo& ...

  8. Spring | Bean自动装配详解

    个人主页:BoBooY的CSDN博客_Java领域博主 前言:上节我给大家讲解了Spring的依赖注入,这一节我们讲解Spring中Bean如何自动装配,废话不多说,直接上正文! 文章目录 Bean的 ...

  9. spring Bean自动装配

    spring Bean自动装配 自动装配是使用spring满足bean依赖的一种方式. spring会在应用上下文中为某个bean寻找其依赖的bean. spring自动装配需要从两个角度来实现,或者 ...

最新文章

  1. AI时代人类需要具备的九种软技能,你get了几个?
  2. 解决用C#在visual studio编程中,console一闪而过
  3. 有弹性的ListView
  4. 华为8x计算机横屏怎么设置,荣耀8x怎么设置横屏显示 两种操作方法详细介绍
  5. bat自动输入用户名和密码_「小白到大牛之路6」交换机后台管理之重复输入用户名和密码...
  6. 计算机管理员无法创建密码,找到电脑管理员的密码
  7. 字体怎么安装到电脑上_文章还在使用电脑上的固定字体?这款字体软件超好用...
  8. 大数据的“媒体玩法”
  9. java 中的wait notify
  10. 不得不看!降低Transformer复杂度的方法
  11. 纪念王盘声逝世一周年王派演唱会成功举行
  12. 多目标优化(三)简单的 MOEA/D
  13. 我第一个用DirextX做的2D游戏——炮炮兵考眼力
  14. 华为KubeEdge在边缘计算的实践
  15. 〖ChatGPT实践指南 - 零基础扫盲篇③〗- 开始使用 ChatGPT 并访问 OpenAI 获取 API Keys
  16. SQL Server 重新组织生成索引
  17. 机器学习期末复习笔记
  18. ai怎样导出所选部分_Illustrator(AI)选定对象批量导出jpg/pdf脚本插件(win/mac)...
  19. FreeCAD Draft ShapeString tutorial
  20. 2014年最新前端开发面试题(面霸题库)

热门文章

  1. 【迁移学习(Transfer L)全面指南】方差、协方差和Pearson相关系数的关系
  2. 脚本程序转变为可执行程序的第三方库——pyinstaller
  3. mysql 返回最大值列名_多列求最大值列和列名
  4. 尚硅谷springcloud第二季笔记_外行人都能看懂的 Spring Cloud,错过了血亏
  5. java wait 线程安全吗_Java多线程中的wait与notify
  6. 递归循环子组件_算法一看就懂之「 递归 」
  7. 用python爬取网站数据期末作业_python实战第一周作业:爬取一页商品数据
  8. ai怎么平均排列_你的隐私正在被 AI “窥探”,马赛克也不管用了
  9. 安全 日志挖掘 分析系统数据源
  10. 基于深度学习的恶意样本行为检测(含源码) ----采用CNN深度学习算法对Cuckoo沙箱的动态行为日志进行检测和分类...