`
一日一博
  • 浏览: 230348 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Spring3之Bean的自动装配

阅读更多

自动装配就是指由Spring来自动地注入依赖对象,无需人工参与。

目前Spring3.0支持“no”、“byName ”、“byType”、“constructor”四种自动装配,默认是“no”指不支持自动装配的,其中Spring3.0已不推荐使用之前版本的“autodetect”自动装配,推荐使用@Autowired注解方式代替;如果想支持“autodetect”自动装配,请将schema改为“spring-beans-2.5.xsd”。

自动装配的好处是减少构造器注入和setter注入配置(其实就是少了<property>标签,但是Bean里面set方法还是必须的),减少配置文件的长度。自动装配通过配置<bean>标签的“autowire”属性来改变自动装配方式。接下来让我们挨着看下配置的含义。
default:表示使用默认的自动装配,默认的自动装配需要在<beans>标签中使用default-autowire属性指定,其支持“no”、“byName ”、“byType”、“constructor”四种自动装配

no:意思是不支持自动装配,必须用户<property name="beanA" ref="bean_a"/>明确指定依赖。

byName:通过设置Bean标签的属性autowire="byName",意思是根据名字进行自动装配,只能用于setter注入。比如我们有方法setBeanA(MyBeanA myBeanA),Spring容器将查找配置文件里标志为beanA的Bean并注入,如果找不到,将什么也不注入。

<bean id="beanA" class="com.chou.bean.MyBeanA"/>
<bean id="bean_b" class="com.chou.bean.MyBeanB" autowire="byName"/>

配置里没有了<property>了,如果一个bean有很多setter注入,通过“byName”方式能减少很多<property>配置。需要注意的是,在根据名字注入时,将把当前Bean自己排除在外:比如“hello”Bean类定义了“setHello”方法,则hello是不能注入到“setHello”的。

byType:通过设置Bean定义属性autowire="byType",意思是指根据类型注入,用于setter注入,比如如果指定自动装配方式为“byType”,而setBeanA(MyBeanA myBeanA)方法需要注入MyBeanA类型数据,则Spring容器将查找MyBeanA类型的Bean,(将把当前Bean自己排除在外)如果找到一个则注入该Bean,如果找不到将什么也不注入。

<bean id="beana" class="com.chou.bean.MyBeanA" autowire-candidate="false"/>
<bean id="beanA" class="com.chou.bean.MyBeanA" primary="true"/>
<bean id="bean_b" class="com.chou.bean.MyBeanB" autowire="byType"/>

根据类型找到多个Bean时,对于集合类型(如List、Set)将注入所有匹配的候选者,而对于其他类型遇到这种情况可能需要使用“autowire-candidate”属性为false来把指定Bean从自动装配候选者中移除,或使用“primary”属性为true来指定某个Bean为首选Bean

constructor:通过设置Bean定义属性autowire="constructor",功能和“byType”功能一样,根据类型注入构造器参数,只是用于构造器注入方式。

autodetect:自动检测是使用“constructor”还是“byType”自动装配方式,已不推荐使用。如果Bean有空构造器那么将采用“byType”自动装配方式,否则使用“constructor”自动装配方式。此处要把3.0的xsd替换为2.5的xsd,否则会报错。

不是所有类型都能自动装配
不能自动装配的数据类型:Object、基本数据类型(Date、CharSequence、Number、URI、URL、Class、int)等;

通过“<beans>”标签default-autowire-candidates属性指定的匹配模式,不匹配的Bean将不能作为自动装配的候选者,例如指定“*Service,*Dao”,将只把匹配这些模式的Bean作为候选者,而不匹配的不会作为候选者;

通过将“<bean>”标签的autowire-candidate属性可被设为false,从而该Bean将不会作为依赖注入的候选者。

数组类型、集合(Set、Collection、List)接口类型:将根据泛型获取匹配的所有候选者并注入到数组或集合中,如“List<HelloApi> list”将选择所有的HelloApi类型Bean并注入到list中,而对于集合的具体类型将只选择一个候选者,如“ArrayList<HelloApi> list”将选择一个类型为HelloApi的Bean注入,而不是选择所有的HelloApi类型Bean进行注入;

字典(Map)接口类型:同样根据泛型信息注入,键必须为String类型的Bean名字,值根据泛型信息获取,如“Map<String, HelloApi> map” 将选择所有的HelloApi类型Bean并注入到map中,而对于具体字典类型如“HashMap<String, HelloApi> map”将只选择类型为HashMap的Bean注入,而不是选择所有的HelloApi类型Bean进行注入

自动装配注入方式能和配置注入方式一同工作吗?当然可以,大家只需记住配置注入的数据会覆盖自动装配注入的数据。


依赖检查(Spring3已经不推荐)
在Spring的Web应用中很可能发生没有匹配的Bean进行自动装配,如果此种情况发生,只有在程序运行过程中发生了空指针异常才能发现错误,如果能提前发现该多好啊,这就是依赖检查的作用。

依赖检查:用于检查Bean定义的属性都注入数据了,不管是自动装配的还是配置方式注入的都能检查,如果没有注入数据将报错,从而提前发现注入错误,只检查具有setter方法的属性。
Spring3+也不推荐配置方式依赖检查了,建议采用@Required注解方式,测试时请将XML schema降低为2.5版本的,和自动装配中“autodetect”配置方式的xsd一样。
依赖检查有四种方式:
none:默认方式,表示不检查;
objects:检查除基本类型外的依赖对象,如果有简单数据类型的属性为null,也不报错;
simple:对基本类型进行依赖检查,包括数组类型,其他依赖不报错
all:对所以类型进行依赖检查,配置方式为:dependency-check="all"

<bean id="bean_b" class="com.chou.bean.MyBeanB"/>
<bean id="bean_a" class="com.chou.bean.MyBeanA" dependency-check="all">
   <property name="bean_b" ref="helloApi"/>  
   <property name="message" value=""/>  
</bean>
分享到:
评论

相关推荐

    spring自动装配例子

    (3)byType:根据属性 类型 自动装配,相同类型多个会抛出异常,设值注入 &lt;bean class="xxx" &gt;&lt;/bean&gt; (4)constructor:与 byType 方式类似,不同之处是构造注入 &lt;bean class="xxx" &gt;&lt;/bean&gt; 本例,演示 byName...

    spring入门教程之bean的继承与自动装配详解

    在Spring框架中,Bean是核心概念之一,它们代表了应用程序中的对象,负责执行特定的功能。Spring作为一个依赖注入(DI)和面向切面编程(AOP)的容器,它管理Bean的生命周期并处理Bean之间的依赖关系。本文将深入...

    Spring实现自动装配

    3. **基于名称的自动装配(By Name Auto-Wiring)**:Spring会查找与目标bean的属性名相同的bean并注入。在XML配置中,可以使用`autowire="byName"`开启此功能。 4. **基于注解的自动装配(Annotation-Based Auto-...

    Spring自动装配解析

    Spring框架是Java开发中广泛应用的一个轻量级容器,它的核心特性之一就是依赖注入(Dependency Injection,简称DI),而Spring的自动装配(Auto-Wiring)则是DI的一种实现方式。本篇文章将深入探讨Spring自动装配的...

    spring学习之四“自动装配”

    3. **constructor**:构造函数级别的自动装配,Spring会在bean实例化时,通过匹配参数类型的构造函数来注入依赖。 4. **property**:属性级别的自动装配,Spring会在setter方法上进行依赖注入。 5. **autodetect**...

    day38 16-Spring的Bean的装配:注解的方式

    在Spring框架中,Bean的装配是核心功能之一,它允许我们管理对象的生命周期和依赖关系。本篇将探讨“注解的方式”来实现Spring Bean的装配。注解提供了声明式的方式来配置Bean,使得代码更加简洁,减少了XML配置的...

    spring自动生成bean项目

    为了简化这一过程,Spring提供了一种自动创建Bean的机制,这就是所谓的"代码生成"或者"Bean自动生成"。本项目"spring自动生成bean项目"旨在通过自动化的方式,帮助开发者根据数据库表结构快速生成对应的Java Bean...

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

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

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

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

    面试官常问的spring依赖注入和bean的装配问题.pdf

    在Spring的面试中,面试官常会问到关于依赖注入和Bean装配的问题。理解这些概念对于开发高质量的Spring应用程序至关重要。 首先,我们来讨论一下Spring中常见的依赖注入方式。 1. setter注入(Setter-based ...

    Spring学习之Bean的装配多种方法

    Spring学习之Bean的装配多种方法 在Spring框架中,Bean的装配是指将对象的创建交给第三方,并且由第三方进行注入的过程。Spring中的Ioc容器扮演着这样的一个角色,将对象的创建等交给Spring,而服务对象只管使用...

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

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

    spring自动装配

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

    Spring 自动装配及其注解

    在Spring框架中,自动装配(Autowiring)是一种机制,它允许Spring容器自动为bean提供其依赖,而无需显式配置。自动装配极大地简化了应用的配置,使得开发者可以更专注于业务逻辑。本文将深入探讨Spring自动装配的...

    spring自动装配项目struts2

    自动装配是Spring框架的核心特性之一,它允许框架自动管理对象之间的依赖关系,无需在代码中显式地创建或查找依赖对象。Spring提供了多种自动装配方式,如byType、byName等,可以根据配置或注解来实现。在项目中,...

    基于java的企业级应用开发:Bean的装配方式.ppt

    本节将详细介绍基于XML、注解(Annotation)以及自动装配这三种Bean装配方式。 首先,我们来理解什么是Bean的装配。Bean的装配,也称为依赖注入,是指将对象所需的依赖关系(例如其他对象或服务)设置到该对象中,...

    spring装配bean实例代码

    在Spring框架中,Bean装配是核心功能之一,它负责初始化、配置和管理应用程序中的对象。本文将深入探讨Spring装配Bean的实例代码,帮助你更好地理解这一关键概念。 首先,Spring装配Bean主要有两种方式:XML配置和...

    spring中的bean

    在Spring中,Bean通常代表应用程序中的一个对象,这些对象由Spring容器(ApplicationContext)管理,包括创建、初始化、装配和销毁。Bean可以通过XML配置文件、注解或者Java配置类进行定义。 1. **Bean的定义**:在...

    spring bean XML配置入门

    在本文中,我们将深入探讨Spring框架中的Bean XML配置,这是Spring的核心特性之一,它允许我们定义、管理和装配应用中的对象。我们将围绕以下知识点展开: 1. **Spring框架基础**: Spring是一个开源的Java平台,...

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

    在Spring框架中,自动装配(Auto-Wiring)是一种简化依赖注入(Dependency Injection,DI)配置的方式,它允许Spring容器自动管理Bean之间的依赖关系。本文将深入探讨如何通过注解(Annotation)和`@Resource`来实现...

Global site tag (gtag.js) - Google Analytics