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

二、配置:

在 <bean> 的 autowire 属性里指定自动装配的模式。默认为 no 。可以通过 <beans> 根元素的 default-autowire 属性改变默认值。

三、自动装配的三种模式:

1.byType(根据类型自动装配):若 IOC 容器中出现多个与目标 Bean 类型一致的 Bean。Spring 无法识别使用哪个,有二义性。报异常。

2.byName(根据名称的自动装配):必须将当前 Bean 的属性名和目标 Bean 的 id 值设置为相同。

3.construtor(根据构造器自动装配):不推荐使用。

四、例子

e1:之前的方式,通过 <property> 来指定。

<bean class="com.nucsoft.spring.Address" id="address">
  <property name="addressName" value="beijing"/>
</bean> <bean class="com.nucsoft.spring.Phone" id="phone" p:phoneNum="123456789"/> <bean id="employee" class="com.nucsoft.spring.Employee">
  <property name="empName" value="emp01"/>
  <property name="phone" ref="phone"/>
  <property name="address" ref="address"/>
</bean>

输出:Employee{empName='emp01', address=Address{addressName='beijing'}, phone=Phone{phoneNum='123456789'}}

e2:根据名称的自动装配

<bean class="com.nucsoft.spring.Address" id="address">
  <property name="addressName" value="beijing"/>
</bean> <bean class="com.nucsoft.spring.Phone" id="phone" p:phoneNum="123456789"/> <bean id="employee" class="com.nucsoft.spring.Employee" autowire="byName">
  <property name="empName" value="emp01"/>
</bean>

输出:Employee{empName='emp01', address=Address{addressName='beijing'}, phone=Phone{phoneNum='123456789'}}

e3:根据类型的自动装配

<bean class="com.nucsoft.spring.Address" id="address">
  <property name="addressName" value="beijing"/>
</bean> <bean class="com.nucsoft.spring.Phone" id="phone" p:phoneNum="123456789"/> <bean id="employee" class="com.nucsoft.spring.Employee" autowire="byType">
  <property name="empName" value="emp01"/>
</bean>

输出:Employee{empName='emp01', address=Address{addressName='beijing'}, phone=Phone{phoneNum='123456789'}}

如果定义多个的话,首先在 idea 中,spring config 文件会报错,给出提示。另外,如果运行的话,会报一个 org.springframework.beans.factory.NoUniqueBeanDefinitionException 这样的异常。

五、细节问题

1.对 <bean> 的属性设置 autowire 属性进行自动装配将会装配 Bean 的所有属性。若希望只装配某个属性时,autowire 属性就不够灵活了。

2.虽然可以通过 autowire 属性能自动装配,但是优先级要低于通过 <property> 配置的属性。如:

<bean class="com.nucsoft.spring.Phone" id="phone02" p:phoneNum="1234567890"/>
<bean class="com.nucsoft.spring.Address" id="address">
  <property name="addressName" value="beijing"/>
</bean> <bean class="com.nucsoft.spring.Phone" id="phone" p:phoneNum="123456789"/> <bean id="employee" class="com.nucsoft.spring.Employee" autowire="byName">
  <property name="empName" value="emp01"/>
  <property name="phone" ref="phone02"/>
</bean>

3.对于 autowire 属性的两种类型:根据类型或根据名称的自动装配不能同时使用。

4.在实际项目中很少使用基于 XML 的 Bean 的自动装配,因为明确清晰配置更易读。

Spring基础——在 Spring Config 文件中基于 XML 的 Bean 的自动装配的更多相关文章

  1. Spring基础—— 在 Spring Config 中使用外部属性文件

    一.在 Spring Config 文件中配置 Bean 时,有时候需要在 Bean 的配置里添加 系统部署的细节信息, 如文件路径,数据源配置信息.而这些部署细节实际上需要在配置文件外部来定义. 二 ...

  2. Spring基础——在Spring Config 文件中配置 Bean

    一.基于 XML 的 Bean 的配置——通过全类名(反射) <bean <!-- id: bean 的名称在IOC容器内必须是唯一的若没有指定,则自动的将全限定类名作为 改 bean 的 ...

  3. Spring中基于xml的AOP

    1.Aop 全程是Aspect Oriented Programming 即面向切面编程,通过预编译方式和运行期动态代理实现程序功能的同一维护的一种技术.Aop是oop的延续,是软件开发中的 一个热点 ...

  4. Spring 框架的概述以及Spring中基于XML的IOC配置

    Spring 框架的概述以及Spring中基于XML的IOC配置 一.简介 Spring的两大核心:IOC(DI)与AOP,IOC是反转控制,DI依赖注入 特点:轻量级.依赖注入.面向切面编程.容器. ...

  5. c# 如何使用DLL的config文件中的信息

    我知道用c#编写的exe程序可以读取config文件中的配置信息,比如Test.exe,可以在与Test.exe相同目录下放置一个config文件:Test.exe.config,用System.Co ...

  6. 在Web.Config文件中使用configSource,避免动态修改web.config导致asp.net重启(另添加一个Config文件用于管理用户数据)

    原文:在Web.Config文件中使用configSource,避免动态修改web.config导致asp.net重启(另添加一个Config文件用于管理用户数据) 我们都知道,在asp.net中修改 ...

  7. Web.config 文件中的 system.webServer

    Web.config 文件中的 system.webServer 节用于指定适用于 Web 应用程序的 IIS 7.0 设置.system.WebServer 是 configuration 节的子级 ...

  8. web.config文件中配置数据库连接的两种方式

    web.config文件中配置数据库连接的两种方式 标签: 数据库webconfig 2015-04-28 18:18 31590人阅读 评论(1)收藏举报    分类: 数据库(74)  在网站开发 ...

  9. Machine.config 文件中节点<machineKey>的强随机生成

    Machine.config 文件中节点<machineKey>的强随机生成 <machineKey>这个节允许你设置用于加密数据和创建数字签名的服务器特定的密钥.ASP.NE ...

随机推荐

  1. Simple-RTMP-Server 服务器搭建

    Simple-RTMP-Server 服务器搭建 1. 服务器镜像获取 github源码地址 git clone https://github.com/winlinvip/simple-rtmp-se ...

  2. Understanding mysql max_connect_errors

    来自:http://mysqlblog.fivefarmers.com/2013/08/08/understanding-max_connect_errors/ Perhaps like many u ...

  3. oreData的学习记录

    1.如果想创建一个带有coreData的程序,要在项目初始化的时候勾选中 2.创建完成之后,会发现在AppDelegate里多出了几个属性,和2个方法 <span style="fon ...

  4. js 去掉字符串前面的0

    <script>var a='00123';alert(a.replace(/\b(0+)/gi,""));</script>

  5. SSAS建模遇到的问题集锦

    1:维度和度量的数据类型一定要一致 2:度量值的类型不能为字符型,因为执行SUM等操作时会报错 3:当度量值中存在着维度表中不存在的Key时,处理的时候设置维度键错误为忽略,如下图所示 4:SSAS多 ...

  6. android google 统计导致的文件冲突

    android studio 加入google 统计 1. buildscript { repositories { jcenter() } dependencies { classpath 'com ...

  7. PHP中ob系列函数整理

    ob,输出缓冲区,是output buffering的简称,而不是output cache.ob用对了,是能对速度有一定的帮助,但是盲目的加上ob函数,只会增加CPU额外的负担. 下面我说说ob的基本 ...

  8. C#排序比较

    与C#定义了相等性比较规范一样,C#也定义了排序比较规范,以确定一个对象与另一个对象的先后顺序.排序规范如下 IComparable接口(包括IComparable接口和IComparable< ...

  9. Wtl之奇技淫巧篇:一、SDI如何居中显示视图

    Wtl的sdi应用,视图默认铺满框架的客户区.视图通常用modeless对话框,所有的界面元素都拥挤在左上角,这明显很丑陋.我们尝试让视图居中显示,保持原始大小,这是个很典型的问题,看似简单,诸多细节 ...

  10. openwrt 编译newifi 应用程序

    首先找交叉编译工具( toolchain ) Development Snapshots http://downloads.openwrt.org/snapshots/trunk/ 我需要的版本是 m ...