Spring 自动装配
优点:自动装配能显著减少配置的数量。
Spring自动装配的5种模式:
可以使用bean元素的autowire属性来指定bean的装配模式:no、byName、byType、constructor、autodetect
一、No
在每个bean中都一个autowire=default的默认配置它的含义是:
采用beans跟标签中的default-autowire="属性值"一样的设置。
autowire=”default”相当于beans跟标签中的default-autowire=”no”
配置文件:
<!-- 定义一个 真正实现业务的bean的实例,通过scope属性指明业务实例对象的作用域,
prototype代表每次请求都会创建一个新的实例-->
<bean id="GDI" class="cn.csdn.impl.GoodsImpl" scope="prototype"></bean>
<!--创建bean的实例 -->
<bean id="GAction" class=" cn.csdn.ac.GoodsAction" scope="prototype">
<!-- 通过业务实现类属性 gdi的set方法 ref引用的实例注入到gdi属性中-->
<property name="gdi" ref="GDI"></property>
</bean>
cn.csdn.impl.GoodsImpl代码
package ac;
import cn.csdn.impl.GoodsImpl;
public class GoodsAction {
/**定义一个GoodsImpl的操作对象*/
private GoodsImpl gdi;
/**生成相应的set方法 通过set方法注入的*/
public void setGdi(GoodsImpl gdi){
this.gdi = gdi;
}
}
二、byname
根据属性名自动装配。此选项将检查容器并根据名字查找与属性完全一致的bean,并将其与属性自动装配。
配置文件如下:
<bean id="employee" class="cn.csdn.bean.Employee" scope="prototype">
<property name="name"><value>寇晓林</value> </property>
<property name="sex" value="女"></property>
</bean>
<bean id="boss" class=" cn.csdn.bean.Boss" scope="prototype" autowire="byName" >
<property name="name" value="RedArmy"/>
</bean>
<bean id="houremployee" class=" cn.csdn.bean.HourEmployee" scope="prototype">
<property name="money" value="1000"/>
</bean>
cn.csdn.bean.Boss代码
public class Boss {
/**姓名*/
private String name;
/**正式员工*/
private Employee employee;
/**小时工*/
private HourEmployee houremployee;
/**省略相应set方法*/
}
cn.csdn.bean.HourEmployee代码
package spr.bean;
public class HourEmployee extends Employee {
private double money;
/**省略相应的set方法*/
}
cn.csdn.bean.Employee代码
package spr.bean;
public class Employee {
/**员工姓名*/
public String name;
/**员工性别*/
public String sex;
/**省略相应的set方法*/
}
三、byType
在使用的过程中必须保证bean能够初始化,否则的话会出现bug
如果有默认的无参数的构造器就不需要多余的配置
如果有带有参数的构造器,那在bean的配置中必须配置器初始化的参数 或者在bean中添加无参数的构造器
如果容器中存在一个与指定属性类型相同的bean,那么将与该属性自动装配。如果存在多个该类型的bean
那么将会抛出异常,并指出不能使用byType方式进行自动装配。若没有找到相匹配的bean,则什么事都不
发
生,属性也不会被设置。如果你不希望这样,那么可以通过设置dependency-check="objects"
让
Spring抛出异常。
案例如下:
package cn.csdn.service;
public class AddrServiceImpl {
private String address;
public void setAddress(String address) {
this.address = address;
}
}
package cn.csdn.service;
public class CorAddrServiceImpl {
private AddrServiceImpl addrServiceImpl;
public void setAddrServiceImpl(AddrServiceImpl addrServiceImpl) {
this.addrServiceImpl = addrServiceImpl;
}
}
package cn.csdn.service;
public class HomeAddrServiceImpl extends AddrServiceImpl {
private String tel;
public void setTel(String tel) {
this.tel = tel;
}
}
applicatinContext.xml文件配置
<bean id="addrServiceImpl" class="cn.csdn.service.AddrServiceImpl"
scope="singleton">
<property name="address">
<value>河北保定</value>
</property>
</bean>
<bean id="corAddrServiceImpl" class="cn.csdn.service.CorAddrServiceImpl"
autowire="byType" scope="singleton">
</bean>
配置文件这样写一点错都没有,可是在写上:
<bean id="homeAddrServiceImpl" class="cn.csdn.service.HomeAddrServiceImpl"
scope="singleton">
<property name="tel">
<value>1520008xxxx</value>
</property>
</bean>
会不会有错啊
在Spring2.5.6版本会出现错误原因是HomeAddrServiceImpl继承了AddrServiceImpl,IoC容器会认为addrServiceImpl和 homeAddrServiceImpl是相同类型的bean,所以会报一下错误:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'empServiceImpl' defined in file [D:\Workspaces\MyEclipse 8.6\20110419_01\bin\applicationContext.xml]: Unsatisfied dependency expressed through bean property 'companyAddress': : No unique bean of type [cn.csdn.service.AddressServiceImpl] is defined: expected single matching bean but found 2: [homeAddressServiceImpl, addressServiceImpl]; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [cn.csdn.service.AddressServiceImpl] is defined: expected single matching bean but found 2: [homeAddressServiceImpl, addressServiceImpl]
但是,在Spring3.0版本中却没有任何错误。因此,这是大家需要注意的一点!
四、constructor
与byType的方式类似,不同之处在于它应用于构造器参数。如果在容器中没有找到与构造器参数类型一致
的bean,那么将会抛出异常。
package cn.csdn.service;
public class AddressServiceImpl {
/**住址*/
private String address;
public void setAddress(String address){
this.address=address;
}
}
package cn.csdn.service;
public class EmpServiceImpl {
/**公司地址*/
private AddressServiceImpl companyAddress;
public EmpServiceImpl(AddressServiceImpl companyAddress){
this.companyAddress=companyAddress;
}
public EmpServiceImpl(){
}
public void setCompanyAddress(AddressServiceImpl companyAddress){
this.companyAddress=companyAddress;
}
}
package cn.csdn.service;
public class HomeAddressServiceImpl extends AddressServiceImpl {
private String address;
public void setAddress(String address){
this.address=address;
}
public HomeAddressServiceImpl() {
super();
}
public HomeAddressServiceImpl(String address){
this.address=address;
}
}
applicationContext.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"
default-autowire="no">
分享到:
相关推荐
本文将深入探讨Spring Bean的继承与自动装配。 首先,让我们了解Bean的基本定义。在Spring配置文件中,`<beans>`元素作为根元素,包含了一系列`<bean>`子元素。每个`<bean>`元素定义了一个Bean实例,它由一个唯一的...
汇川四轴机械手自动装配程序详解:PLC信号对接与运动控制实践,附机器人程序、IO点分配及接线图,汇川四轴机械手装配程序 汇川ROBOT机器人自动装配程序,与PLC信号对接,进行自动装配,待机位,安全位,多个装配位...
Java注解机制之Spring自动装配实现原理详解 Java注解机制是Java语言中的一种元数据 Facility,提供了一种在编译期和运行期对Java代码进行标记和描述的机制, Spring框架中使用Java注解机制来实现自动装配功能。自动...
SpringBoot启动及自动装配原理过程详解 SpringBoot启动及自动装配原理过程详解是 SpringBoot 框架中一个非常重要的机制,它控制着整个应用程序的启动和自动装配过程。下面将详细介绍 SpringBoot 启动及自动装配...
Spring自动装配Bean实现过程详解 Spring框架提供了自动装配Bean的功能,该功能可以根据Bean的属性名称或类型自动将Bean装配到其他Bean中,从而简化了Bean的配置工作。在本文中,我们将详细介绍Spring自动装配Bean...
《UG自动装配技术详解——基于Visual C++的实现》 在现代工业设计中,计算机辅助设计(CAD)软件扮演着至关重要的角色,其中UG(Unigraphics NX)是一款广泛使用的三维建模工具,尤其在机械工程领域。UG的自动装配...
《机器人自动装配线详解》 在现代工业生产中,机器人自动装配线已经成为提高生产效率、降低人力成本、保证产品质量的重要工具。"机器人自动装配线.rar"这个压缩包中,包含了与这一主题相关的图纸、模型及设计图,让...
《按钮全自动装配机详解》 在现代工业生产中,自动化设备的应用越来越广泛,极大地提高了生产效率,降低了人工成本。本文将详细探讨“按钮全自动装配机”的相关知识点,以帮助读者理解这一机械设备的设计原理、工作...
### Spring自动装配模式详解 #### 一、引言 在Spring框架中,自动装配是一种非常实用的功能,可以简化Bean的依赖注入过程。Spring提供了多种自动装配模式,每种模式都有其适用场景。本文将详细介绍Spring框架中的...
《Spring自动装配详解——基于IDEA 2020的小实例》 在Java开发领域,Spring框架以其强大的功能和灵活性,成为了企业级应用开发的首选。其中,Spring的自动装配特性(Autowired)是其核心特性之一,极大地简化了依赖...
Spring 自动装配的二义性实例解析 ...* Spring 框架中的自动装配机制详解 本文通过示例代码详细介绍了 Spring 自动装配的二义性实例解析问题,并提供了解决该问题的方法,对大家的学习和工作具有参考价值。
使用mindmaster打开
JSP Spring自动装配Bean实例详解 Spring框架是Java企业级应用开发的事实标准,它提供了全面的编程和配置模型。在Spring中,自动装配(autowiring)功能可以极大地简化Java对象的创建和组装。JSP(Java Server Pages...
SpringBoot自动装配原理详解 SpringBoot作为Java开发中的一款热门框架,因其简化配置、快速启动和集成众多功能的特性,深受开发者喜爱。其中,自动装配是SpringBoot的核心特性之一,它极大地减少了手动配置的工作量...
《阀体自动装配组装线SW17设计详解》 在当今工业自动化进程中,高效、精准的装配线设计显得尤为重要。本资料集“阀体自动装配组装线SW17可编辑非常好的设计图纸资料.zip”提供了详尽的设计图纸和相关文档,为理解和...
《O型圈自动装配测试设备SW17设计详解》 O型圈自动装配测试设备SW17是一款在工业生产中广泛使用的自动化设备,主要用于O型圈的精确装配和质量检测。这种设备的设计融合了机械工程、自动化控制和精密测量等多领域的...
总结,E型卡簧装配机图纸的分析涵盖了机械设计、自动化控制等多个领域,是理解设备工作原理和实现高效装配的关键。通过对总装图和零件图的深入研究,我们可以更好地掌握设备的结构和功能,从而优化设计、提高生产...
Spring自动装配与扫描注解代码详解 Spring自动装配是指Spring框架中的一种机制,用于自动装配 Bean 之间的依赖关系,而无需手动编写大量的XML配置文件。这种机制可以大大简化Spring应用程序的配置和维护工作。 在...
6. **装配体设计意图**:在设计过程中,Solidworks 2015的装配命令允许用户设定设计意图,这意味着设计师可以预设零件的相对关系,当修改其中一个零件时,其他相关零件会自动更新,保持整个装配体的完整性。...