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. SZU:A26 Anagram

    Judge Info Memory Limit: 32768KB Case Time Limit: 10000MS Time Limit: 10000MS Judger: Normal Descrip ...

  2. s​s​h​配​置​公​钥​和​私​钥​登​陆​S​e​c​u​r​e​C​R​T

    在用windows时管理linux服务器时,常会用到SecureCRT.Xshell以及开源的putty.在我工作环境大多都是采用密码认证的方式进行登录.今天对学习了些SecureCRT的密钥登录方式 ...

  3. [转]Installing Snow Leopard (Client) on VMware Fusion 6.0.3

    Source: http://inficererk.wordpress.com/2014/05/29/installing-snow-leopard-client-on-vmware-fusion-6 ...

  4. XSD实例

    XSD实例 在前面的XSD笔记中,基本上是以数据类型为主线来写的,而在我的实际开发过程中,是先设计好了XML的结构(元素.属性),并写好了一份示例,然后再反过来写XSD文件(在工具生成的基础上修改), ...

  5. mongodb学习(翻译1)

    学习mongodb,试着翻译写,英语能力有限,希望大家指正,不顺畅地方大家担待,会后续翻译后面内容: 开始认识C#驱动(官方) 简介 本介绍提供了足够的信息,让你开始使用C#的驱动程序.起步之后,你可 ...

  6. 鸟哥的LINUX私房菜基础篇第三版 阅读笔记 二

    Linux档案与目录管理 1.一些比较特殊的目录,需要用力的记下来 .         代表当前层目录 ..        代表上一层目录 -        代表前一个工作目录   (这个好屌!其他的 ...

  7. SL.XNA中的Popup

    如果要xna与sl混合显示,就不能用popup,不然会有各种显示错乱的问题.如果xna与sl单独显示,可以使用popup,但是要记得移除UIElementRenderer.就是说popup只能交给系统 ...

  8. JAVA多线程经典问题 -- 生产者 消费者

    工作2年多来一直也没有计划写自己的技术博客,最近辞职在家翻看<thingking in JAVA>,偶尔看到了生产者与消费者的一个经典的多线程同步问题.本人在工作中很少使用到多线程以及高并 ...

  9. git的初步使用---本地代码库的使用和提交

    git的初步使用---本地代码库的使用和提交 git是一个好东西,但对于新手来说,这个工具并不好使用,因为它里面涉及到很多东西,而这些东西新手一时间是无法理解的.不幸的是,本人就是新手一枚,所以,这里 ...

  10. 多线程计算----pthread

    #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <pthread.h& ...