转自:http://blog.csdn.net/xiao_jun_0820/article/details/7233139

autowire="byName"会自动装配属性与Bean id相同的Bean,例如有两个BEAN,

<bean id="userDAO" class="com.springdemo.dao.AdminDAO"></bean>
<bean id="userService3" autowire="byName" class="com.springdemo.service.UserService"></bean>

UserService类中有一个userDAO属性:

private IUserDAO userDAO;

public IUserDAO getUserDAO() {
  return userDAO;
 }

public void setUserDAO(IUserDAO userDAO) {
  this.userDAO = userDAO;
 }

这样在创建userService3这个BEAN的时候会byName找到userDAO这个BEAN然后setter注入到userService3这个BEAN实例中去。

如果userService3中同时又设置了setter注入,如下:

<bean id="clientDAO"  class="com.springdemo.dao.ClientDAO"></bean>

<bean id="userService2"  autowire="byName"
  class="com.springdemo.service.UserService">
  <property name="userDAO">
   <ref bean="clientDAO" />
  </property>
 </bean>

这时候既有autowire又有property,那么property的setter会覆盖autowire的setter注入,这时候UserService类中的userDAO其实是com.springdemo.dao.ClientDAO类型,而不是com.springdemo.dao.AdminDAO

表 3.2. Autowiring modes

模式 说明
no  
byName

根据属性名自动装配。此选项将检查容器并根据名字查找与属性完全一致的bean,并将其与属性自动装配。例如,在bean定义中将autowire设置为by name,而该bean包含master属性(同时提供setMaster(..)方法),Spring就会查找名为master的bean定义,并用它来装配给master属性。

byType

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

constructor

byType的方式类似,不同之处在于它应用于构造器参数。如果在容器中没有找到与构造器参数类型一致的bean,那么将会抛出异常。

autodetect

通过bean类的自省机制(introspection)来决定是使用constructor还是byType方式进行自动装配。如果发现默认的构造器,那么将使用byType方式。

spring bean autowire自动装配的更多相关文章

  1. Spring bean的自动装配属性

    bean的自动装配属性能简化xml文件配置. bean 的自动装配属性分为四种: 1.byName 2.byTyoe 3.constructor 4. autodetect byName: 它查找配置 ...

  2. Spring基础——在 Spring Config 文件中基于 XML 的 Bean 的自动装配

    一.Spring IOC 容器支持自动装配 Bean,所谓自动装配是指,不需要通过 <property> 或 <constructor-arg> 为 Bean 的属性注入值的过 ...

  3. spring实战二之Bean的自动装配(非注解方式)

    Bean的自动装配 自动装配(autowiring)有助于减少甚至消除配置<property>元素和<constructor-arg>元素,让Spring自动识别如何装配Bea ...

  4. Spring(五)--autowire自动装配和spel

    autowire自动装配和spel 1.需要的实体类 2.需要的配置文件 <?xml version="1.0" encoding="UTF-8"?> ...

  5. Spring(三):bean的自动装配

    Bean的自动装配 自动装配是Spring满足bean依赖的一种方式. Spring会在上下文中自动寻找,并自动给bean装配属性 Spring中三种装配方式 在xml中显式的配置. 在java中显式 ...

  6. Spring学习03(Bean的自动装配)

    6.Bean的自动装配 6.1 自动装配说明 自动装配是使用spring满足bean依赖的一种方法 spring会在应用上下文中为某个bean寻找其依赖的bean. Spring中bean的三种装配机 ...

  7. Spring系列7:`autowire`自动装配怎么玩

    回顾 前几篇我们介绍各种依赖依赖注入,都是显式指定的,配置明确但同时也有些繁杂和重复."很多发明的出发点,都是为了偷懒,懒人是推动社会进步的原动力".Spring 提供了自动注入依 ...

  8. bean的自动装配,使用注解开发,使用java的方式配置Spring

    bean的自动装配 自动装配是Spring满足bean依赖一种方式! Spring会在上下文中自动寻找,并自动给bean装配属性! 在Spring中有三种装配的方式 在xml中显示的配置 在java中 ...

  9. Spring autowire自动装配 ByType和ByName

    不使用自动装配前使用的是类的引用: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=& ...

随机推荐

  1. Python编程 - json字符串的解析

    import json jsonString = '{"arrayOfNums":[{"number":0},{"number":1},{& ...

  2. webpack插件html-webpack-plugin

    1.插件安装 npm install html-webpack-plugin --save-dev 2.插件使用 webpack.config.js配置文件为: var htmlWebpackPlug ...

  3. 〖Linux〗打开qtcreater出现错误的解决方法

    1. 更换了显卡驱动,发现打开qtcreater时出现了以下的错误: qtcreator: error : cannot open shared object file: No such file o ...

  4. 【Docker】常用命令

    1.查看正在运行的容器 [root@localhost ~]# docker ps CONTAINER ID        IMAGE               COMMAND            ...

  5. Web应用的演变以及网络应用程序的架构的优缺点

    (1)主机/终端  特点:      主机负责所有的计算(处理业务),      终端只负责输入输出(不做任何计算).  优点:      可靠,安全,i/o能力强.  缺点:      昂贵,扩展困 ...

  6. Android网络开发之HttpURLConnection

    http是一个可靠的传输,建立在TCP/IP连接之上,缺省端口是80,其他端口号也可以用.Android可以用HttpURLConnection或HttpClient接口来开发http程序. http ...

  7. 【redis】常用命令

    三.常用命令    1)连接操作命令    quit:关闭连接(connection)    auth:简单密码认证    help cmd: 查看cmd帮助,例如:help quit         ...

  8. redis lpop key 当key不存在时,返回nil , 监测redis执行语句是否正常执行

    Lpop key 返回值: 列表的头元素. 当key 不存在时, 返回 nil . 需求:  开发在执行 lpop key 时, 出现问题 , 执行语句卡住, 不能执行下去 , 需对此做一个监测 由于 ...

  9. JS数据交互:动态从数据库中获取数据填充Select

    JavaScript代码: $(document).ready(function () { getIntype(); });function getIntype(){ $.ajax({ type:&q ...

  10. 网站博客更换主机空间搬家:Discuz! X2.5老鹰主机搬家全过程

    http://www.freehao123.com/discuz-x2-5-banjia/由于我放在hawkhost老鹰主机主机的部落论坛就要到期了,而老鹰主机的续费价格却是按照原价来的,没有任何优惠 ...