一、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 的自动装配,因为明确清晰配置更易读。

转载于:https://www.cnblogs.com/solverpeng/p/5680518.html

Spring基础——在 Spring Config 文件中基于 XML 的 Bean 的自动装配相关推荐

  1. Spring-IOC—基于XML配置Bean

    Spring-IOC-基于XML配置Bean 1.Spring 配置/管理 bean 介绍 1.Bean 管理包括两方面 1.创建bean对象 2.给bean注入属性 2.Bean配置方式 1.基于x ...

  2. spring中基于XML的AOP配置步骤

    spring中基于XML的AOP配置步骤 IAccountService.java package com.itheima.service;/*** 账户的业务层接口*/ public interfa ...

  3. spring框架的概述以及spring中基于XML的IOC配置——概念

    1.spring的概述     spring是什么     spring的两大核心     spring的发展历程和优势     spring体系结构 2.程序的耦合及解耦     曾经案例中问题   ...

  4. 一步一步手绘Spring IOC运行时序图二(基于XML的IOC容器初始化)

    相关内容: 架构师系列内容:架构师学习笔记(持续更新) 一步一步手绘Spring IOC运行时序图一(Spring 核心容器 IOC初始化过程) 一步一步手绘Spring IOC运行时序图二(基于XM ...

  5. Spring Ioc容器,基于xml的bean管理

    IOC容器 IOC思想基于IOC容器,IOC容器底层就是对象工厂 IOC底层 通过控制反转,使用xml配置文件和反射机制实现对对象的创建 IOC接口 实现IOC容器的两种方式 (1)BeanFacto ...

  6. ASP.NET一个网站内存放多个config文件(Web.Config文件中configSource 的用法

    ASP.NET一个网站内存放多个config文件(Web.Config文件中configSource 的用法) 2011年08月10日 星期三 上午 11:41 每个网站里都会有一个web.confi ...

  7. Web.config文件中的location元素

    在Web.config文件中使用<location>元素可以在同一个配置文件中指定多个设定组,使用<location>元素的path属性可以指定设定应该被应用到子目录或文件. ...

  8. Machine.config 文件中节点machineKey的强随机生成

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

  9. remoting 突然出现 服务器遇到内部错误。有关更多信息,请关闭服务器的 .config 文件中的 customErrors。

    在使用C#的Remoting技术开发软件的时候,如果服务端与客户端都在同一台 电脑 上,客户端能够成功获取服务端的错误. 但如果服务端与客户端在二台电脑上的时候,通常客户端获取服务端内部错误的时候,只 ...

最新文章

  1. Yii2 使用 Joins 查询
  2. 给研发工程师的代码质量利器 | SOFAChannel#5 直播整理
  3. 2007 China MVP Open Day
  4. 可能是堆被损坏,这也说明 XX.exe 中或它所加载的任何 DLL 中有 bug
  5. Spring Data JPA教程第一部分:配置
  6. MVC里面写html获取不到input,asp.net-mvc – ASP.Net [HiddenInput]数据属性在Razor中用Html.EditorForModel渲染时不起作用?...
  7. mouseup 左键_javascript中mouseup事件丢失的原因与解决办法
  8. requests 200 scrapy超时_selenium咋和scrapy一起用捏?
  9. *BZOJ2330: [SCOI2011]糖果
  10. SpringBoot2.0整合jsp
  11. (超详细,避免踩坑)如何使用freeMaker模板生成器处理图片以及文字替换
  12. Xilinx Srio详解IP核使用
  13. 试试这些方法,误删文件怎么恢复?
  14. java软件更换皮肤怎么做_java窗体程序更换皮肤方法详细步骤
  15. Golang zip流式解析器
  16. 前馈神经网络(FNN)
  17. 手风琴效果(vue实现)
  18. 前端:客户端渲染 vs 服务器渲染
  19. 大数据分析,到底分析了啥?
  20. 计算机二级java答题演示_全国计算机二级考试高级Office考试操作题

热门文章

  1. mysql sql 一部分记录_MySQL性能优化实践(很全面,值得收藏)
  2. 日常生活开支记账明细_深圳公司如何记账报税代理记账报税的流程以及所需的资料...
  3. linux删除php文件权限不够,linux - 用php的exec()删除目录文件提示权限不够
  4. 移植内核过程的几个问题
  5. SDL学习——画图、点阵显示
  6. 95-190-540-源码-window-清除器(Evictors)-TimeEvitor简介
  7. 【java】Java对象为啥要实现Serializable接口?
  8. 一次kafka的offset回退事件及相关知识点
  9. SpringBoot:@ConfigurationProperties注解使用与源码
  10. spring集成mybatis后,打印SQL语句