Spring BeanFactory提供了自动装配组件依赖的对象的功能。自动装配能应用在每个组件上,可以为一些组件定义自动装配,而另一些组件则不使用。
使用”autowire”属性可以设置自动装配,autowire有五种模式:
no
默认属性,不进行自动装配。
byName
通过bean的属性名称自动装配合作者。
Spring用bean中set方法名和BeanFactory中定义的合作者的名称做匹配,一但2者匹配,Sping就会把合作者进行注入。
可以使用id属性也可以使用name属性定义合作者的名称,这2个属性在Spring进行自动装配时没有区别。
当有多个名称相同的合作者在Spring中定义时,Srping在自动装配时选择最后一个定义的合作者注入。
在多个合作者名称相同进行自动装配时,合作者的id属性并不会比name属性优先处理。无论怎样定义Spring总会把最后一个定义的合作者注入。
byType
通过bean set方法中参数的类型和BeanFactory中定义合作者的类型做匹配,Spring会找到匹配的合作者进行注入。
在byType自动装配模式中,Spring不关心合作者的名称,只关心合作者的类型是否满足条件。
类似上面介绍的byName的方式,在byType方式中,当具有相同名称并且有相同类型的多个合作者被找到时,Spring会注入最后一个定义的合作者。
constructor
constructor其实时按byType的方式进行构造函数的注入。
constructor装配方式不关心构造参数的顺序,无论构造函数参数的顺序如何Spring都会按类型匹配到正确的合作者进行注入。
在byType方式中,当没有找到类型相同的合作者时Spring什么都不会去做。但是在constructor方式中,当没有找到和Bean构造函数中参数类型相匹配的合作者时,Spring会抛出异常。
Spring在进行constructor方式的自动装配时,强制要求所有的构造函数中所有的合作者都必须存在。
autodetect
在autodetect的方式中,Spring检查一个Bean内部是否有默认的构造函数。如果有默认的参数Spring就使用byType的方式进行自动装配。如果没有默认的构造函数Spring则使用constructor的方式进行自动装配。
如果一个Bean同时定义了默认构造函数和带参数的构造函数,Spring仍会使用byType的方式进行装配。
不管使用上述哪种装配方式,都可以在Bean中显示的定义合作者。显示定义的依赖关系优先级比自动装配高。
自动装配的功能可以和自动依赖检查一起使用。Spring会首先进行自动装配,然后在进行依赖检查。
自 动装配提供了简化配置的可能性,但是我并不建议在项目中大量的使用自动装配,特别时byType方式。因为自动装配,尤其时byType方式,破坏了 Bean和合作者之间显示的依赖关系,所有的依赖关系都时不明显的。在使用自动装配后我们的依赖关系需要到源代码中才能看到,这使得维护或文档化Bean 的依赖关系变得很困难。
适当的使用自动装配比如byName方式的装配,是有一些好处的。比如我们在一些特定的范围里可以借助byName自动装配的功能来实现“以惯例来代替配置”的框架。
如何讲所有bean进行自动装配而不用一个一个去设置bean的auto-ware属性呢?我们可以再Spring配置文件的根元素<beans>中设置default-autoware,就可以将所有的Bean设置位自动装配,如:<beans default-autoware="byName">,这样设置,所有的Bean都会采用byName方式来自动装配,除非有Bean指定了自己的自动装配方式。
分享到:
相关推荐
2. **基于类型的自动装配(By Type Auto-Wiring)**:这是最常用的自动装配方式,Spring会查找与目标bean类型匹配的bean,并将其注入。如果有多个匹配的bean,Spring会抛出异常。可以在bean定义中使用`autowired`...
Spring框架是Java开发中广泛应用的一个轻量级容器,它的核心特性之一就是依赖注入(Dependency Injection,简称DI),而Spring的自动装配(Auto-Wiring)则是DI的一种实现方式。本篇文章将深入探讨Spring自动装配的...
ean的自动装配,有4种 (1)no:不做任何操作 (2)byName:根据属性 名 自动装配,设值注入 <bean id="xxx" class="xxx" ></bean> (3)byType:根据属性 类型 自动装配,相同类型多个会抛出异常,设值注入 <bean...
Spring 中自动装配 Bean 的属性 在 Spring 框架中,自动装配 Bean 的属性是非常重要的一部分,今天我们将为大家分享关于在 Spring 中自动装配 Bean 的属性的知识。 首先,Spring 的最基本的能力就是 DI,即依赖...
Spring自动装配Bean实现过程详解 Spring框架提供了自动装配Bean的功能,该功能可以根据Bean的属性名称或类型自动将Bean装配到其他Bean中,从而简化了Bean的配置工作。在本文中,我们将详细介绍Spring自动装配Bean...
Spring框架的自动装配Bean功能是为了简化配置,使得开发者无需在XML配置文件中显式指定Bean间的依赖关系。本文将详细讲解Spring中自动装配Bean的三种主要方式:byName、byType以及constructor。这些方法帮助Spring的...
- `autodetect`模式:尝试通过`byType`和`byName`来自动检测并装配Bean。 - `default`模式:如果没有指定其他方式,将使用默认的装配策略。 描述中提到的博文链接指向了一个ITeye上的博客文章,可能详细解释了...
JSP Spring自动装配Bean实例详解 Spring框架是Java企业级应用开发的事实标准,它提供了全面的编程和配置模型。在Spring中,自动装配(autowiring)功能可以极大地简化Java对象的创建和组装。JSP(Java Server Pages...
本文将深入探讨Spring Bean的继承与自动装配。 首先,让我们了解Bean的基本定义。在Spring配置文件中,`<beans>`元素作为根元素,包含了一系列`<bean>`子元素。每个`<bean>`元素定义了一个Bean实例,它由一个唯一的...
- **@Autowired**:用于自动装配Bean的依赖。Spring会尝试根据类型或名称找到合适的Bean进行注入。 - **@Qualifier**:配合@Autowired使用,当有多个相同类型的Bean时,可以指定要注入的具体Bean。 - **@Scope**:...
例如,使用@AttachAnnotation注解来标记某个方法,然后使用反射机制来获取注解信息,并根据注解信息来自动装配Bean对象。 Java注解机制之Spring自动装配实现原理详解是指Spring框架中使用Java注解机制来实现自动...
当Spring容器在配置文件中找不到明确的通过`ref`属性指定的依赖时,会尝试通过类型匹配来查找并装配Bean。如果容器中存在唯一一个与所需类型匹配的Bean,那么这个Bean就会被自动装配到目标Bean的相应属性上。如果有...
本文将深入探讨Spring装配Bean的实例代码,帮助你更好地理解这一关键概念。 首先,Spring装配Bean主要有两种方式:XML配置和注解配置。在本例中,我们将重点关注XML配置,对应的压缩包文件名为“springxmldemo”,...
1. **@Autowired**:这是最常用的注解,用于自动装配bean。Spring会尝试找到类型匹配的bean进行注入。如果存在多个候选bean,则可以通过`@Qualifier`进一步指定。 2. **@Qualifier**:与`@Autowired`配合使用,用于...
自动装配是Spring框架的核心特性之一,它允许框架自动管理对象之间的依赖关系,无需在代码中显式地创建或查找依赖对象。Spring提供了多种自动装配方式,如byType、byName等,可以根据配置或注解来实现。在项目中,...
为了简化这一过程,Spring提供了一种自动创建Bean的机制,这就是所谓的"代码生成"或者"Bean自动生成"。本项目"spring自动生成bean项目"旨在通过自动化的方式,帮助开发者根据数据库表结构快速生成对应的Java Bean...
Spring还提供了自动装配功能,通过@Autowired注解,容器会自动寻找合适的bean进行注入,无需显式指定bean的ID。这使得配置更加简洁,特别是在使用大量bean的情况下。 **总结** Spring的核心容器bean是其强大功能的...
在Spring框架中,“自动装配”(Autowiring)是一项核心特性,它允许Spring容器自动为bean注入所需的依赖,而无需显式配置。本篇将深入探讨自动装配的概念、类型以及如何在Spring应用中使用。 自动装配是Spring IoC...
在Spring框架中,自动装配(Auto-Wiring)是一种便捷的方式来管理bean之间的依赖关系,它能够自动将所需的bean注入到目标bean中,而无需显式配置。然而,自动装配并非适用于所有场景,它存在一些限制。以下是一些...
在Spring框架中,`@Autowired`和`@Resource`都是用于自动装配Bean的重要注解,它们简化了依赖注入的过程,使得代码更加简洁、易于维护。本文将深入探讨这两个注解的使用、区别以及如何在实际开发中应用它们。 首先...