`

Spring中自动装配

阅读更多
http://blog.csdn.net/wangli325/article/details/7471327

Spring中自动装配

Spring中有四种自动装配类型,分别为:byName,byType,constructor,autodetect,下面来分别介绍一下这些是如何自动装配的

   <bean id="foo" class="...Foo" autowire="autowire type">

    有四种自动装配类型:

    1.byName:寻找和属性名相同的bean,若找不到,则装不上。

    2.byType:寻找和属性类型相同的bean,找不到,装不上,找到多个抛异常。

    3.constructor:查找和bean的构造参数一致的一个或

      多个bean,若找不到或找到多个,抛异常。按照参数的类型装配 

    4.autodetect: (3)和(2)之间选一个方式。不确定性的处理与(3)和(2)一致。

       <bean id="bar" class="Bar" autowire="byName"/>



在介绍实例之前先要创建结构,我们以一个实例开始,用Customers来做实例,实例的结构为:




我们要创建一个CustomersServiceImpl.java,内容为:

package cn.csdn.hr.service;

import cn.csdn.hr.dao.BaseDao;

import cn.csdn.hr.dao.CustomersDao;

import cn.csdn.hr.dao.CustomersDaoImpl;

publicclass CustomersServiceImpl implements CustomersService {

    private CustomersDao customersDao = new CustomersDaoImpl();

    private BaseDao baseDao;

    // set方法注入

    publicvoid setCustomersDao(CustomersDao customersDao) {

       this.customersDao = customersDao;

    }

    publicvoid setBaseDao(BaseDao baseDao) {

       this.baseDao = baseDao;

    }

    public CustomersDao getCustomersDao() {

       returncustomersDao;

    }

    public BaseDao getBaseDao() {

       returnbaseDao;

    }

}

在xml中对上面的两个属性进行注入

1.首先来介绍一下没有autowire的效果,

<?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.5.xsd">

    <!-- bean的注入方式   ref属性   ref元素-->

    <!-- autowire自动装配的类型 -->

    <bean id="customersServiceImpl" class="cn.csdn.hr.service.CustomersServiceImpl">

       <property name="customersDao">

           <bean class="cn.csdn.hr.dao.CustomersDaoImpl"/>

           </property>

       <property name="baseDao">

           <bean class="cn.csdn.hr.dao.BaseHibernateDaoImpl"/>

           </property>

    </bean>

</beans>

也可以用ref引用的方式来写,可以写为:

<?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.5.xsd">

    <bean id="customersServiceImpl" class="cn.csdn.hr.service.CustomersServiceImpl">

       <property name="customersDao">

           <ref bean="customersDao"/>

       </property>

       <property name="baseDao">

           <ref bean="baseDao"/>

       </property>

    </bean>

    <bean id="customersDao" class="cn.csdn.hr.dao.CustomersDaoImpl"/>

    <bean id="baseDao" class="cn.csdn.hr.dao.BaseHibernateDaoImpl"/>

</beans>

这样,在junit中测试为:

publicvoid test() {

       //获取应用程序上下文对象

       ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:beanAuto.xml");

   

       CustomersServiceImpl customersServiceImpl = (CustomersServiceImpl) ac.getBean("customersServiceImpl");

   

       System.out.println("baseDao的实例"+customersServiceImpl.getBaseDao());

      

       System.out.println("customersDao的实例"+customersServiceImpl.getCustomersDao());

    }

我们可以得到:

baseDao的实例cn.csdn.hr.dao.BaseHibernateDaoImpl@12be1bd

customersDao的实例cn.csdn.hr.dao.CustomersDaoImpl@1f17e77







2.当把autowire设置为byName的时候,可以省略很多的代码,在junit和其他都不动的情况下,只改变xml,beanByName.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.5.xsd">

    <!-- autowire自动装配的类型

       byName是根据名称自动装配

     -->

    <bean id="customersServiceImpl" class="cn.csdn.hr.service.CustomersServiceImpl" autowire="byName"/>

    <bean id="customersDao" class="cn.csdn.hr.dao.CustomersDaoImpl"></bean>

    <bean id="baseDao" class="cn.csdn.hr.dao.BaseHibernateDaoImpl"></bean>

</beans>

注:当autowire="byName"时,cn.csdn.hr.service.CustomersServiceImpl 属性名与bean的id名称的名称相同会自动装配。



3.当把autowire设置为byType的时候

<?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.5.xsd">

    <!-- autowire自动装配的类型

       byType是根据类型自动装配  类型不能相同

       cn.csdn.hr.service.CustomersServiceImpl 属性类型与bean中有相同的类型的时候会自动装配

     -->

    <bean id="customersServiceImpl" class="cn.csdn.hr.service.CustomersServiceImpl" autowire="byType"/>

    <bean id="customersDaoImpl" class="cn.csdn.hr.dao.CustomersDaoImpl"></bean>

    <bean id="baseDaoImpl" class="cn.csdn.hr.dao.BaseHibernateDaoImpl"></bean>

    </beans>



注:不可以有相同的类型,也就是说不可以有相同的类名存在,id可有可无,但是一般情况下是存在的,它与其他的没有关联



4.当把autowire设置为constructor的时候

<?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.5.xsd">

    <!-- autowire自动装配的类型

       constructor是根据类型自动装配  根据构造器的参数来显示

       cn.csdn.hr.service.CustomersServiceImpl 属性类型与bean中有相同的类型的时候会自动装配

     -->

    <bean id="customersServiceImpl" class="cn.csdn.hr.service.CustomersServiceImpl" autowire="constructor"/>

    <bean id="customersDaoImpl" class="cn.csdn.hr.dao.CustomersDaoImpl"/>

    <bean id="baseDaoImpl" class="cn.csdn.hr.dao.BaseHibernateDaoImpl"/>

</beans>

注:在执行这个xml的时候,要有构造函数,经过验证得出必须有有参构造才可以全部得到



5.当把autowire设置为autodetect的时候

<?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.5.xsd">

    <!-- autowire自动装配的类型

        cn.csdn.hr.service.CustomerServiceImpl

       有没有默认的构造  没有就采用byType类型如果没有则采用constructor -->

    <bean id="customersServiceImpl" class="cn.csdn.hr.service.CustomersServiceImpl" autowire="autodetect" />

    <bean id="customersDaoImpl" class="cn.csdn.hr.dao.CustomersDaoImpl" />

    <bean id="baseDaoImpl" class="cn.csdn.hr.dao.BaseHibernateDaoImpl" />

</beans>
分享到:
评论

相关推荐

    Spring自动装配解析

    本篇文章将深入探讨Spring自动装配的工作原理、配置方式以及应用场景。 1. 自动装配的基本概念 自动装配是指Spring容器在创建bean实例时,自动识别并设置其依赖对象的过程。它减少了开发者手动配置bean之间依赖关系...

    Spring实现自动装配

    Spring框架是Java开发中不可或缺的一部分,它以其强大的依赖注入(Dependency Injection,简称DI)特性而闻名,其中自动装配(Auto-Wiring)是DI的一种实现方式。自动装配允许开发者减少手动配置bean之间的依赖关系...

    Spring中自动装配的4种方式

    Spring中自动装配的4种方式 在 Spring 框架中,自动装配是指容器可以自动将 Bean 之间的关系装配起来,不需要手动配置,从而简化了 XML 配置文件的编写。下面将详细介绍 Spring 中的 4 种自动装配方式。 byName ...

    在Spring中自动装配Bean的属性

    Spring 中自动装配 Bean 的属性 在 Spring 框架中,自动装配 Bean 的属性是非常重要的一部分,今天我们将为大家分享关于在 Spring 中自动装配 Bean 的属性的知识。 首先,Spring 的最基本的能力就是 DI,即依赖...

    spring的自动装配

    spring的自动装配

    spring自动装配例子

    ean的自动装配,有4种 (1)no:不做任何操作 (2)byName:根据属性 名 自动装配,设值注入 &lt;bean id="xxx" class="xxx" &gt;&lt;/bean&gt; (3)byType:根据属性 类型 自动装配,相同类型多个会抛出异常,设值注入 ...

    Spring中的自动装配有哪些限制?.docx

    在Spring框架中,自动装配(Auto-Wiring)是一种便捷的方式来管理bean之间的依赖关系,它能够自动将所需的bean注入到目标bean中,而无需显式配置。然而,自动装配并非适用于所有场景,它存在一些限制。以下是一些...

    spring自动装配项目struts2

    在这个"spring自动装配项目struts2"中,我们将探讨如何整合Spring的自动装配特性与Struts2框架,以及Hibernate作为持久层框架的使用。 首先,让我们了解Spring的自动装配(Auto-Wiring)。自动装配是Spring框架的...

    spring自动装配

    标题中的“Spring自动装配”指的是Spring框架中的一个重要特性,它允许开发者在不显式配置Bean依赖的情况下,由Spring容器自动管理Bean之间的依赖关系。这一特性极大地简化了代码,提高了可维护性和可测试性。 在...

    Spring的自动装配源代码

    在Spring框架中,自动装配(Auto-Wiring)是一种简化配置的方式,它...在压缩包文件"20110419spring"中,可能包含了一些关于Spring自动装配的示例代码或者教程,你可以进一步研究这些资源,以加深对这一主题的理解。

    第五章 Spring4 自动装配、方法注入

    例如,如果你有一个名为"dataSource"的bean定义,并且你的另一个bean需要一个DataSource类型的属性,Spring可以通过byType自动装配,将"dataSource"注入到该属性中。这大大减少了手动配置的工作量。 接下来,我们...

    4Spring自动装配——annotation resource方式

    在Spring框架中,自动装配(Auto-Wiring)是一种简化依赖注入(Dependency Injection,DI)配置的方式,它允许...通过阅读和理解源码,我们可以更好地掌握Spring自动装配的工作原理,从而更好地利用这一强大的功能。

    Spring 自动装配及其注解

    本文将深入探讨Spring自动装配的概念、类型以及常用的注解。 一、Spring自动装配的基本概念 自动装配是Spring IoC(控制反转)的一种实现方式,IoC意味着容器负责创建对象并管理它们的生命周期,包括对象之间的依赖...

    spring中的自动装配实例byName、byType

    在Spring框架中,自动装配(Auto-Wiring)是一种简化依赖注入的方式,它允许Spring容器自动为bean找到并设置其依赖。本篇文章将深入探讨两种主要的自动装配方式:byName和byType,以及它们在实际应用中的实例。 **1...

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

    Java注解机制之Spring自动装配...Java注解机制之Spring自动装配实现原理详解是指Spring框架中使用Java注解机制来实现自动装配功能的机制,该机制可以根据注解信息来自动将Bean对象关联起来,从而实现了自动装配功能。

    Spring的自动装配Bean的三种方式

    Spring框架的自动装配Bean功能是为了简化配置,使得开发者无需在XML配置文件中显式指定Bean间的依赖关系。本文将详细讲解Spring中自动装配Bean的三种主要方式:byName、byType以及constructor。这些方法帮助Spring的...

    spring学习之四“自动装配”

    在Spring框架中,“自动装配”(Autowiring)是一项核心特性,它允许Spring容器自动为bean注入所需的依赖,而无需显式配置。本篇将深入探讨自动装配的概念、类型以及如何在Spring应用中使用。 自动装配是Spring IoC...

    Spring自动装配模式表

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

    深度剖析Spring Boot自动装配机制实现原理(csdn)————程序.pdf

    在Spring Boot中,自动装配是其核心特性之一,极大地简化了应用程序的配置。自动装配的目标是减少手动配置bean,让Spring框架能够根据项目依赖自动识别并管理bean。这个过程主要由`@EnableAutoConfiguration`注解...

Global site tag (gtag.js) - Google Analytics