`
yinghuayu1324117
  • 浏览: 69789 次
  • 性别: Icon_minigender_2
  • 来自: 保定
文章分类
社区版块
存档分类

自动装配详解

阅读更多

 

Spring 自动装配

优点:自动装配能显著减少配置的数量。

Spring自动装配的5种模式:

         可以使用bean元素的autowire属性来指定bean的装配模式:nobyNamebyTypeconstructorautodetect

一、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">

    <!-- 通过业务实现类属性 gdiset方法 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继承了AddrServiceImplIoC容器会认为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的继承与自动装配详解

    本文将深入探讨Spring Bean的继承与自动装配。 首先,让我们了解Bean的基本定义。在Spring配置文件中,`&lt;beans&gt;`元素作为根元素,包含了一系列`&lt;bean&gt;`子元素。每个`&lt;bean&gt;`元素定义了一个Bean实例,它由一个唯一的...

    汇川四轴机械手自动装配程序详解:PLC信号对接与运动控制实践,附机器人程序、IO点分配及接线图,汇川四轴机械手装配程序 汇川ROBOT机器人自动装配程序,与PLC信号对接,进行自动装配,待机位,安全位

    汇川四轴机械手自动装配程序详解:PLC信号对接与运动控制实践,附机器人程序、IO点分配及接线图,汇川四轴机械手装配程序 汇川ROBOT机器人自动装配程序,与PLC信号对接,进行自动装配,待机位,安全位,多个装配位...

    Java注解机制之Spring自动装配实现原理详解

    Java注解机制之Spring自动装配实现原理详解 Java注解机制是Java语言中的一种元数据 Facility,提供了一种在编译期和运行期对Java代码进行标记和描述的机制, Spring框架中使用Java注解机制来实现自动装配功能。自动...

    SpringBoot启动及自动装配原理过程详解

    SpringBoot启动及自动装配原理过程详解 SpringBoot启动及自动装配原理过程详解是 SpringBoot 框架中一个非常重要的机制,它控制着整个应用程序的启动和自动装配过程。下面将详细介绍 SpringBoot 启动及自动装配...

    Spring自动装配Bean实现过程详解

    Spring自动装配Bean实现过程详解 Spring框架提供了自动装配Bean的功能,该功能可以根据Bean的属性名称或类型自动将Bean装配到其他Bean中,从而简化了Bean的配置工作。在本文中,我们将详细介绍Spring自动装配Bean...

    zhuangpei.rar_UG_UG自动装配_visual c_zhuangpei_装配

    《UG自动装配技术详解——基于Visual C++的实现》 在现代工业设计中,计算机辅助设计(CAD)软件扮演着至关重要的角色,其中UG(Unigraphics NX)是一款广泛使用的三维建模工具,尤其在机械工程领域。UG的自动装配...

    机器人自动装配线.rar

    《机器人自动装配线详解》 在现代工业生产中,机器人自动装配线已经成为提高生产效率、降低人力成本、保证产品质量的重要工具。"机器人自动装配线.rar"这个压缩包中,包含了与这一主题相关的图纸、模型及设计图,让...

    按钮全自动装配机.rar

    《按钮全自动装配机详解》 在现代工业生产中,自动化设备的应用越来越广泛,极大地提高了生产效率,降低了人工成本。本文将详细探讨“按钮全自动装配机”的相关知识点,以帮助读者理解这一机械设备的设计原理、工作...

    Spring自动装配模式表

    ### Spring自动装配模式详解 #### 一、引言 在Spring框架中,自动装配是一种非常实用的功能,可以简化Bean的依赖注入过程。Spring提供了多种自动装配模式,每种模式都有其适用场景。本文将详细介绍Spring框架中的...

    spring-autowire.zip

    《Spring自动装配详解——基于IDEA 2020的小实例》 在Java开发领域,Spring框架以其强大的功能和灵活性,成为了企业级应用开发的首选。其中,Spring的自动装配特性(Autowired)是其核心特性之一,极大地简化了依赖...

    Spring 自动装配的二义性实例解析

    Spring 自动装配的二义性实例解析 ...* Spring 框架中的自动装配机制详解 本文通过示例代码详细介绍了 Spring 自动装配的二义性实例解析问题,并提供了解决该问题的方法,对大家的学习和工作具有参考价值。

    springboot总结自动装配原理bean的发现加载原理实现步骤详解.emmx

    使用mindmaster打开

    JSP Spring 自动化装配Bean实例详解

    JSP Spring自动装配Bean实例详解 Spring框架是Java企业级应用开发的事实标准,它提供了全面的编程和配置模型。在Spring中,自动装配(autowiring)功能可以极大地简化Java对象的创建和组装。JSP(Java Server Pages...

    SpringBoot自动装配原理(简单易懂)

    SpringBoot自动装配原理详解 SpringBoot作为Java开发中的一款热门框架,因其简化配置、快速启动和集成众多功能的特性,深受开发者喜爱。其中,自动装配是SpringBoot的核心特性之一,它极大地减少了手动配置的工作量...

    阀体自动装配组装线sw17可编辑非常好的设计图纸资料.zip

    《阀体自动装配组装线SW17设计详解》 在当今工业自动化进程中,高效、精准的装配线设计显得尤为重要。本资料集“阀体自动装配组装线SW17可编辑非常好的设计图纸资料.zip”提供了详尽的设计图纸和相关文档,为理解和...

    O型圈自动装配测试设备sw17非常好的设计图纸资料.zip

    《O型圈自动装配测试设备SW17设计详解》 O型圈自动装配测试设备SW17是一款在工业生产中广泛使用的自动化设备,主要用于O型圈的精确装配和质量检测。这种设备的设计融合了机械工程、自动化控制和精密测量等多领域的...

    E型卡簧装配机图纸-总装图-零件图

    总结,E型卡簧装配机图纸的分析涵盖了机械设计、自动化控制等多个领域,是理解设备工作原理和实现高效装配的关键。通过对总装图和零件图的深入研究,我们可以更好地掌握设备的结构和功能,从而优化设计、提高生产...

    Spring自动装配与扫描注解代码详解

    Spring自动装配与扫描注解代码详解 Spring自动装配是指Spring框架中的一种机制,用于自动装配 Bean 之间的依赖关系,而无需手动编写大量的XML配置文件。这种机制可以大大简化Spring应用程序的配置和维护工作。 在...

    Solidworks 2015中文版从入门到精通视频教程下载16_装配命令详解.zip

    6. **装配体设计意图**:在设计过程中,Solidworks 2015的装配命令允许用户设定设计意图,这意味着设计师可以预设零件的相对关系,当修改其中一个零件时,其他相关零件会自动更新,保持整个装配体的完整性。...

Global site tag (gtag.js) - Google Analytics