一、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. Hermes实时检索分析平台

    一.序言 随着TDW的发展,公司在大数据离线分析方面已经具备了行业领先的能力.但是,很多应用场景往往要求在数秒内完成对几亿.几十亿甚至几百上千亿的数据分析,从而达到不影响用户体验的目的.如何能够及时有 ...

  2. Android 第三方开源库收集整理(转)

    原文地址:http://blog.csdn.net/caoyouxing/article/details/42418591 Android开源库 自己一直很喜欢Android开发,就如博客签名一样,  ...

  3. java项目中读取properties文件

    这里的配置文件都放在src下面, System.properties的内容 exceptionMapping=exceptionMapping.properties config=config.pro ...

  4. Ecshop文章列表页显示内容摘要

    本教程中讲到的“内容摘要”指的是文章内容的前 60个字符(当然也可以是前40个,前50个等等) 下面以 2.7.2版 + 官方默认模板 为例进行讲解: 1).修改 includes/lib_artic ...

  5. 2.C#中泛型在方法Method上的实现

    阅读目录   一:C#中泛型在方法Method上的实现 把Persion类型序列化为XML格式的字符串,把Book类型序列化为XML格式的字符串,但是只写一份代码,而不是public static s ...

  6. Gson 和 FastJson 性能测试

    使用版本: compile 'com.google.code.gson:gson:2.7' compile 'com.alibaba:fastjson:1.2.17' 评测样板为一个People数组, ...

  7. LINQ TO ENTITY 根据Birthday获取Age

    from emp in EmployeeInfo let years = EntityFunctions.DiffYears(emp.Birthday.Value,DateTime.Now) let ...

  8. xml和xsd架构文档相关知识

    1.使用架构(XSD)验证XML文件 2.使用自动生成工具: 工具目录:C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4. ...

  9. Selenium WebDriver屏幕截图(C#版)

    Selenium WebDriver屏幕截图(C#版)http://www.automationqa.com/forum.php?mod=viewthread&tid=3595&fro ...

  10. 使用Flask-Migrate进行管理数据库升级

    我们在升级系统的时候,经常碰到需要更新服务器端数据结构等操作,之前的方式是通过手工编写alter sql脚本处理,经常会发现遗漏,导致程序发布到服务器上后无法正常使用. 现在我们可以使用Flask-M ...