`
yinghuayu1324117
  • 浏览: 67622 次
  • 性别: 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就类似是定义的一个组件,而这个组件的作用就是实现某个功能的,下面这篇文章主要给大家介绍了关于spring入门教程之bean继承与自动装配的相关资料,需要的朋友可以参考借鉴,下面随着小编来...

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

    主要介绍了SpringBoot启动及自动装配原理过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

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

    主要为大家详细介绍了Java注解机制之Spring自动装配实现原理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

    使用mindmaster打开

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

    主要介绍了Spring自动装配Bean实现过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

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

    主要介绍了JSP Spring 自动化装配Bean实例详解的相关资料,需要的朋友可以参考下

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

    主要介绍了Spring自动装配与扫描注解代码详解,具有一定借鉴价值,需要的朋友可以参考下。

    详解Spring Boot自动装配的方法步骤

    主要介绍了详解Spring Boot自动装配的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    Java方法参数装配顺序详解

    主要介绍了Java方法参数装配顺序详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    spring定义和装配bean详解

    主要介绍了spring定义和装配bean详解,具有一定参考价值,需要的朋友可以了解下。

    吴天雄--Spring笔记.doc

    Spring个人笔记,共计59页。第一天内容:Spring框架简介(EJB、JMX、Spring核心功能、Spring模块...第三天内容:Spring自动装配,Spring自动加载properties文件,单例设计模式,声明式事务,Ajax,JSON。 --author:

    雷达测距原理和方法详解

    汽车与汽车之间的距离小于安全距离,就应该能够自动报警,并采取制动措施。 目前,测定汽车之间安全距离的方法有三种:超声波测距、毫米波雷达测距和激光测距, 防撞雷达系统装配在车辆的前方、侧方或者后方,完成...

    Struts2属性文件详解

    指定Spring框架的自动装配模式, 该属性的默认值是name, 即默认根据Bean的name属性自动装配. struts.objectFactory.spring.useClassCache 该属性指定整合Spring框架时,是否缓存Bean实例,该属性只允许使用true和false...

    SpringBoot2的最佳实践 SpringBoot2基础入门+底层注解+自动配置+高级特性与原理解析

    SpringBoot2的最佳实践课程的技术含量几乎是近期SpringBoot2相关课程的天花板。课程内容以时下最新的技术点为主线,逐步的进行展开,分别细化的讲解了SpringBoot2基础课程...├─10、底层注解-@Conditional条件装配.mp

    spring2.5学习PPT 传智博客

    13.@Autowire注解与自动装配 14.让Spring自动扫描和管理Bean 15.使用JDK中的Proxy技术实现AOP功能 16.使用CGLIB实现AOP功能与AOP概念解释 17.使用Spring的注解方式实现AOP入门 18.使用Spring的注解方式实现AOP...

    低清版 大型门户网站是这样炼成的.pdf

    2.5.2 调用校验框架进行自动校验 91 2.5.3 自定义国际化struts 2校验错误消息 92 2.5.4 struts 2的自带校验器 92 2.6 struts 2的拦截器 94 2.6.1 struts 2内建拦截器介绍 95 2.6.2 定义和使用拦截器栈 97 ...

    Spring中Bean的讲解

    自动装配四.Bean的生命周期 一.Bean的简介 Spring 官方文档对 bean 的解释是: In Spring, the objects that form the backbone of your application and that are managed by the Spring IoC container are

    史上最全 SpringBoot 注解详解

    一、注解(annotations)列表 ...组件扫描,可自动发现和装配一些Bean。 3、@Configuration 等同于Spring的XML配置文件;使用Java代码可以检查类型安全。 4、@EnableAutoConfiguration 自动配置 5、@RestContro

Global site tag (gtag.js) - Google Analytics