spring自动注入有5中方式,分别是:

  1. byName:根据自动注入类中的对象名字,会到配置文件中找相关id或者name的bean,如果找不到则不会匹配,如果找到多个bean,则会报错。
  2. byType:根据自动注入类中的对象类型,找到配置文件中相同类型的bean,如果找到多个类型相同的bean,会报错。若没有找到相关匹配,则什么都不会发生。
  3. constructor:根据构造函数的参数进行自动匹配。如果一个类中有多个构造方法,会优先找参数最多的构造方法。如果有构造方法参数一样多,则会执行先找到那个(个人感觉)。通过构造方法注入Dog类,具体写法如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
    "http://www.sprintframework.org/dtd/spring-beans.dtd">
    <beans>
    <bean id="EnHelloWorld" class="cn.action.EnHelloWorld">
    <constructor-arg index="0">
    <value>xwt!</value>
    </constructor-arg>
    <constructor-arg index="1">
    <value>cm!</value>
    </constructor-arg>
    <constructor-arg index="2">
    <ref bean="date"/>
    </constructor-arg>
    </bean>
    <!--id中不可以包含特殊字符。一个bean中可以没有ID,此时可以用name来代替id,
    可以有多个name,中间用‘,’隔开。id和name可以同时存在 --> <!--sigleton默认为true。当true时,会共享一个实例,每次请求返回的都是同一个。就是单例模式
    如果为false,每次请求都会返回一个新创建的实例 -->
    <bean id="ChHelloWorld" class="cn.action.HelloWorld" autowire="constructor" >
    <property name="msg">
    <value>xxxx</value>
    </property>
    <property name="date">
    <ref bean="date"/>
    </property>
    </bean>
    <bean id="date" class="java.util.Date"/>
    <bean name="dog" class="cn.model.Dog">
    <property name="name">
    <value>TT</value>
    </property>
    </bean>
    </beans>
  4. autodetect:通过对Bean检查类的内部来选择constructor或者byType。先找到哪一个就执行哪一个。使用autodetect时候在类中必须写set方法,可以不写构造方法(不写时总会有默认的无参构造)。如果没有或者有多个构造方法时候,会优先执行set方法,如果只有一个构造方法,会优先执行constructor方式(自己测试得出,可能有误)。
  5. no:不使用自动装配,bean的应用使用ref。许多企业级的应用中不推荐使用自动注入,因为自动注入会使得依赖关系不清晰。

总结:显示的依赖例如property和constructor-arg元素总会覆盖自动装配,对于大型应用来说不推荐使用自动注入。因为它去除了参考依赖的透明性和清晰性。还有值得注意的一点就是byName和 byType两种自动注入方式不能注入基本类型。

关于spring autowrie的5种方式的更多相关文章

  1. spring配置datasource三种方式

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp34 spring配置datasource三种方式 1.使用org.spri ...

  2. 使用web.xml方式加载Spring时,获取Spring context的两种方式

    使用web.xml方式加载Spring时,获取Spring context的两种方式: 1.servlet方式加载时: [web.xml] <servlet> <servlet-na ...

  3. 普通java类加入spring容器的四种方式

    今天在自己开发的工具类中使用了spring注入的方式调用了其他类,但是发生的报错,在整理了后今天小结一下. 首先简单介绍下spring容器,spring容器是整个spring框架的核心,通常我们说的s ...

  4. Spring管理事物两种方式

    Spring管理事物两种方式 1. 编程式事物管理(在开发中不经常使用) 使用步骤 1. 配置数据库事物管理 DataSourceTransactionManager <!--配置事物管理器-- ...

  5. Spring依赖注入三种方式详解

    在讲解Spring依赖注入之前的准备工作: 下载包含Spring的工具jar包的压缩包 解压缩下载下来的Spring压缩包文件 解压缩之后我们会看到libs文件夹下有许多jar包,而我们只需要其中的c ...

  6. Spring 事务配置5种方式

    Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource.TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分. DataSo ...

  7. Spring注入值得2种方式:属性注入和构造注入

    Spring是一个依赖注入(控制反转)的框架,那么依赖注入(标控制反转)表现在那些地方了? 即:一个类中的属性(其他对象)不再需要手动new或者通过工厂方法进行创建,而是Spring容器在属性被使用的 ...

  8. [转] spring事务管理几种方式

    前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的. ...

  9. (转)spring事务管理几种方式

    转自:http://blog.csdn.net/jeamking/article/details/43982435 前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置 ...

随机推荐

  1. 释放c盘空间

    Win7的系统引导盘用着用着会越来越小.怎么办呢?我以前在网上查过资料,说是找个工具加大C盘.我加了,从原来的20G加到现在的35G.用了一段时间后,空间又只剩几百M了.难道又要加?? 后来,在网上找 ...

  2. Linux Tweak:交换 Caps_Lock 与 Control_R

    很少使用的Caps_Lok键占据着键盘的黄金位置,不仅如此,它还经常被按错. 于是受到程序员神器HHKB启发(如图) 对于我,Linux程序员 + vimer来说: ESC取代`键,极大的方便了VIM ...

  3. ASP.NET MVC3开发-数据库篇之CodeFisrt开发(一)

    本文讲述了在ASP.NET MVC3开发中M层使用Code Fisrt如何进行开发,由于作者对ASP.NET MVC3的学习不是很深,所以写的都是些基本的内容(写的如有不正确的地方请评论指正),适合初 ...

  4. js 上传下载(留着备用)

      js 上传下载(留着备用) 下载文件 1. <a href="#" onClick="download()">下载文件</a>  & ...

  5. Java快速开发工具 WebBuilder 6.8发布

    WebBuilder是一款开源的可视化Java Web应用开发和运行平台: 基于浏览器的集成开发环境,可视化和智能化的设计,能轻松完成常规应用和面向手机的移动应用开发: 高效.稳定和可扩展的特点,适合 ...

  6. “MVC+Nhibernate+Jquery-EasyUI” 信息发布系统 第六篇(图片新闻的添加以及带分页的静态页的生成)

    “MVC+Nhibernate+Jquery-EasyUI” 信息发布系统 第六篇(图片新闻的添加以及带分页的静态页的生成) 一.这篇文章主要是要实现:图片新闻的添加,无刷新图片的上传,以及添加新闻静 ...

  7. ADS的go to命令

    我们有时候在一个函数右键没有看到“go to”选项,这是因为没有Make,要先Make之后才能使用go to 命令

  8. 识别Andriod APK签名证书类型

    转载请注明出处 根据已知Google证书的序列号来识别APK使用哪种证书签名的 目前只列出google原生签名,其他私有签名均视为presigned #!/bin/bash # Grab cert. ...

  9. javascript深入之location对象和history对象

    浏览器的location 和history对象: 一.location对象: 1>location.reload() 相当于按浏览器上的“刷新”(IE)或“Reload”(Netscape)键. ...

  10. css ie6最小高度问题

    最小高度问题:  这个最小高度 min-height:的问题,因为min-height:只在IE7\FF中起作用.至于这个IE6死活就是不认.而我这个页面又必需得用这个最小高度来定.   但头痛的是I ...