Spring基础——在 Spring Config 文件中基于 XML 的 Bean 的自动装配
一、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 的自动装配相关推荐
- Spring-IOC—基于XML配置Bean
Spring-IOC-基于XML配置Bean 1.Spring 配置/管理 bean 介绍 1.Bean 管理包括两方面 1.创建bean对象 2.给bean注入属性 2.Bean配置方式 1.基于x ...
- spring中基于XML的AOP配置步骤
spring中基于XML的AOP配置步骤 IAccountService.java package com.itheima.service;/*** 账户的业务层接口*/ public interfa ...
- spring框架的概述以及spring中基于XML的IOC配置——概念
1.spring的概述 spring是什么 spring的两大核心 spring的发展历程和优势 spring体系结构 2.程序的耦合及解耦 曾经案例中问题 ...
- 一步一步手绘Spring IOC运行时序图二(基于XML的IOC容器初始化)
相关内容: 架构师系列内容:架构师学习笔记(持续更新) 一步一步手绘Spring IOC运行时序图一(Spring 核心容器 IOC初始化过程) 一步一步手绘Spring IOC运行时序图二(基于XM ...
- Spring Ioc容器,基于xml的bean管理
IOC容器 IOC思想基于IOC容器,IOC容器底层就是对象工厂 IOC底层 通过控制反转,使用xml配置文件和反射机制实现对对象的创建 IOC接口 实现IOC容器的两种方式 (1)BeanFacto ...
- ASP.NET一个网站内存放多个config文件(Web.Config文件中configSource 的用法
ASP.NET一个网站内存放多个config文件(Web.Config文件中configSource 的用法) 2011年08月10日 星期三 上午 11:41 每个网站里都会有一个web.confi ...
- Web.config文件中的location元素
在Web.config文件中使用<location>元素可以在同一个配置文件中指定多个设定组,使用<location>元素的path属性可以指定设定应该被应用到子目录或文件. ...
- Machine.config 文件中节点machineKey的强随机生成
Machine.config 文件中节点<machineKey>的强随机生成 Machine.config 文件中节点<machineKey>的强随机生成 <machin ...
- remoting 突然出现 服务器遇到内部错误。有关更多信息,请关闭服务器的 .config 文件中的 customErrors。
在使用C#的Remoting技术开发软件的时候,如果服务端与客户端都在同一台 电脑 上,客户端能够成功获取服务端的错误. 但如果服务端与客户端在二台电脑上的时候,通常客户端获取服务端内部错误的时候,只 ...
最新文章
- Yii2 使用 Joins 查询
- 给研发工程师的代码质量利器 | SOFAChannel#5 直播整理
- 2007 China MVP Open Day
- 可能是堆被损坏,这也说明 XX.exe 中或它所加载的任何 DLL 中有 bug
- Spring Data JPA教程第一部分:配置
- MVC里面写html获取不到input,asp.net-mvc – ASP.Net [HiddenInput]数据属性在Razor中用Html.EditorForModel渲染时不起作用?...
- mouseup 左键_javascript中mouseup事件丢失的原因与解决办法
- requests 200 scrapy超时_selenium咋和scrapy一起用捏?
- *BZOJ2330: [SCOI2011]糖果
- SpringBoot2.0整合jsp
- (超详细,避免踩坑)如何使用freeMaker模板生成器处理图片以及文字替换
- Xilinx Srio详解IP核使用
- 试试这些方法,误删文件怎么恢复?
- java软件更换皮肤怎么做_java窗体程序更换皮肤方法详细步骤
- Golang zip流式解析器
- 前馈神经网络(FNN)
- 手风琴效果(vue实现)
- 前端:客户端渲染 vs 服务器渲染
- 大数据分析,到底分析了啥?
- 计算机二级java答题演示_全国计算机二级考试高级Office考试操作题
热门文章
- mysql sql 一部分记录_MySQL性能优化实践(很全面,值得收藏)
- 日常生活开支记账明细_深圳公司如何记账报税代理记账报税的流程以及所需的资料...
- linux删除php文件权限不够,linux - 用php的exec()删除目录文件提示权限不够
- 移植内核过程的几个问题
- SDL学习——画图、点阵显示
- 95-190-540-源码-window-清除器(Evictors)-TimeEvitor简介
- 【java】Java对象为啥要实现Serializable接口?
- 一次kafka的offset回退事件及相关知识点
- SpringBoot:@ConfigurationProperties注解使用与源码
- spring集成mybatis后,打印SQL语句