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. Moq的使用心得

    Moq的使用心得 1.Moq中Mock Repository时最好是Mock Repository的接口,这样会避免不知名的错误. var mockClubRepository = new Mock& ...

  2. 认识WinDbg

    WinDbg学习笔记(一)--认识WinDbg 一.前言    本人学习WinDbg已经有好几天了,虽说技术掌握的还不太熟练,不过也总算是入门了在学习WinDbg的过程中,觉得WinDbg真的比Oll ...

  3. [转]Hooked on DTrace

    source link: 1.http://blog.bignerdranch.com/1907-hooked-on-dtrace-part-1/ 2.http://blog.bignerdranch ...

  4. SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY

    SCOPE_IDENTITY.IDENT_CURRENT 和 @@IDENTITY SQL Server 2000中,有三个比较类似的功能:他们分别是:SCOPE_IDENTITY.IDENT_CUR ...

  5. urllib2 源码小剖

    urllib2 源码小剖 2013-08-25 23:38 by 捣乱小子, 272 阅读, 0 评论, 收藏, 编辑 两篇小剖已经完成: urllib 源码小剖 urllib2 源码小剖 urlli ...

  6. kivy EventDispatcher

    Let's talk about kivy's EventDispatcher here: The codes I have tried here: codes here: from kivy.eve ...

  7. Arduino 各种模块篇 光敏感应模块 light sensor

    It looks like this one: This one isn't a digital light sensor, so it's very simple. http://www.seeed ...

  8. [每日一题] OCP1z0-047 :2013-07-19 Rules of Precedence――括号的使用

    这道题目的意思是你的公司决定给所有呆到5年或5年以上的所有员工每个月加50美元,然后算出总的年薪.每个月薪水:salary,每个月加到:salary+50,总的年薪: (salary+50)*12. ...

  9. android 豆瓣客户端 视频

    链接如下:http://download.csdn.net/detail/jltxgcy/5667337

  10. 把python文件编译成exe文件

    我用的是py2exe. 下载地址http://sourceforge.net/projects/py2exe/files/py2exe/0.6.9/ 你可以根绝自己的Python版本选择适当的下载 我 ...