spring框架参考手册(4.2.6版本)翻译——第三部分核心技术6.4.5自动装配

     2022-04-27     423

关键词:

6.4.5 自动装配

Spring容器可以在协作bean之间自动建立关系。你可以允许Spring通过检查ApplicationContext的上下文,自动为你的bean解析协作者(其他bean)。自动装配具有以下优点:

  • 自动装配可以显著减轻指定属性或构造参数的需求量;
  • 自动装配可以随着你对象的演化而更新配置。例如:如果你需要为一个类添加新的依赖,这个依赖可以自动满足而不需要你去修改配置文件。因此,自动装配在开发期间特别有用。

当使用基于XML配置,你可以通过<bean/>元素的autowire属性指定自动装配的模式,其中

自动装配有以下4种模式。您指定自动装配的每个bean并且也可以选择自动装配哪些个。

表6.2 自动装配模式

模式

解释

(默认)不会自动装配。Bean的引用必须通过定义ref元素来实现。

byName

通过属性名进行自动装配。Spring会通过查找跟属性名称一致的Bean去装配。

byType

允许通过跟属性类型一致的Bean进行装配,但是如果类型一致的Bean在容器中存在多个,则会报错,属性就装配不成功。

constructor

跟byType类似,但是这种是针对构造参数进行装配。如果容器中不存在跟构造参数类型一致的Bean,则会报错。

 

使用byType和constructor自动装配模式,你可以连接数组和类型集合。在这种情况下,提供容器内与预期类型匹配的所有autowire候选者都可以被用于装配Bean。 如果预期的键类型为String,则可以自动装配强类型的Maps。 自动装配的强类型Maps值由预期类型匹配的所有Bean实例组成,而Maps键则与bean名称相对应。

您可以将autowire行为与依赖性检查相结合,这将在自动装配完成后执行。

自动装配的局限性和缺点

当在整个项目中一致地使用自动装配时,自动装配效果最佳。一般情况下,如果不使用自动装配,那么开发人员就会对用它来装配一个或两个bean定义感到困惑。

自动装配的局限性和缺点:

  • 在属性和构造参数上的显式设置总会覆盖自动装配。你不能自动装配像基础类型、字符串和类类型(以及这样简单属性的数组),这是设计上的局限性。
  • 自动装配没有明确配置那么准确。虽然如上表所示,Spring会注意避免猜测,以防在不明确导致意外结果。Spring管理对象之间的关系也不会被明确记录。
  • 依赖信息可能对于从Spring容器生成文档的工具来说不可用。
  •  容器中多个Bean可能与set方法或者构造参数的类型匹配。对于数组、集合或Maps,这样不成问题。然而对于单一依赖,这种模糊性就不允许了,如果没有唯一Bean可用,就会抛出异常。

在后一种情况下,你有几种选择:

  • 显式设置依赖,不采用自动装配
  • <bean/>元素上设置autowire-candidate属性值为false,就可以避免自动装配,像下一章节描述的一样。
  •  通过将其<bean />元素的primary属性设置为true,将单个bean定义指定为主要候选者。
  • 基于注解配置可以实现更细粒度的控制,像6.9节“基于注解的容器配置”描述的一样
从自动装配中排除一个bean

在每个bean的基础上,您可以从自动装配中排除bean。 在Spring的XML格式中,将<bean />元素的autowire-candidate属性设置为false; 容器使指定的bean的定义对自动装配体系结构不可用(包括注解样式的配置,如@Autowired)。

您还可以基于bean名称的模式匹配来限制autowire候选者。顶级元素<beans />在其default-autowire-candidates属性中接受一个或多个匹配模式。例如,要将autowire候选状态限制为名称以Repository结尾的任何bean,可以提供值为* Repository。要提供多个模式,请在逗号分隔的列表中定义它们。bean定义autowire-candidate属性的显式值true或false始终具有更高的优先级,对于此类bean,模式匹配规则不适用。

对于您永远不希望通过自动装配注入其他的bean,这些技术是非常有用。这并不意味着被排除的bean本身不能使用自动装配进行配置,而是非自动装配其他bean的候选者。

spring框架参考手册(4.2.6版本)翻译——第三部分核心技术6.6.3其他aware接口

...接口除了上面讨论的ApplicationContextAware和BeanNameAware之外,Spring还提供了一系列Aware接口,允许bean向容器表明它们需要确定的基础依赖。其中最重要的Aware接口总结如下-作为一般规则,名称很好地说明了依赖类型:表6.4Aware接口名... 查看详情

spring框架参考手册(4.2.6版本)翻译——第三部分核心技术6.4.1依赖注入

6.4依赖典型的企业应用程序不包含单个对象(或Spring用法中的bean)。即使是最简单的应用程序也有一些对象可以协同工作,以呈现连贯的应用程序给最终用户看。下一节将介绍如何从定义多个独立的bean,到对象协作取得统一目... 查看详情

spring框架参考手册(4.2.6版本)翻译——第三部分核心技术6.8.2使用beanfactorypostprocessor定制配置元数据

...stProcessor定制配置元数据我们将看到的下一个扩展点是org.springframework.beans.factory.config.BeanFactoryPostProcessor。这个接口的语义类似于BeanPostProcessor的语义,主要区别在于:BeanFactoryPostProcessor对bean配置元数据进行操作; 查看详情

spring框架参考手册(4.2.6版本)翻译——第三部分核心技术6.4.2依赖注入和配置的细节

...bean(协作者)的引用,或者作为内联定义的值。为此,Spring的基于XML的配置元数据支持其<property/>和<constructor-arg/>元素中的子元素类型。直接值(基本类型、String等)<property/>元素的value属性将属 查看详情

spring框架参考手册(4.2.6版本)翻译——第三部分核心技术6.3bean概述

6.3Bean概述  SpringIoC容器管理一个或多个bean。这些bean是使用你提供给容器的配置元数据去创建的,例如,以XML<bean/>定义的形式。  在容器内部,这些bean的定义以BeanDefinition对象呈现出来,其中包含了(以及其他信息)... 查看详情

spring框架参考手册(4.2.6版本)翻译——第三部分核心技术6.7bean的继承

6.7Bean的继承bean的定义可以包含许多配置信息,包括构造函数参数,属性值和容器特定的信息,例如初始化方法,静态工厂方法名称等。子bean的定义从父定义继承配置数据。子定义可以根据需要覆盖某些值或添加其他值。使用父... 查看详情

spring框架参考手册(4.2.6版本)翻译——第三部分核心技术6.5.1单例(singleton)作用域

....1 单例(singleton)作用域定义为单例作用域的Bean,在Spring容器中只会存在一个实例,这个实例是共享的,所有匹配这个Bean的请求,Spring容器返回此共享的实例。换句话说,当您定义bean定义并将其作用域设置为singleton时,Spri... 查看详情

spring框架参考手册(4.2.6版本)翻译——第三部分核心技术6.5.5自定义(custom)作用域

...原型作用域。创建自定义作用域要将自定义作用域集成到Spring容器中,需要实现org.springframework.beans.factory.config.Scope接口,本节将对此进行介绍。有关如何实现自己的作用域的方 查看详情

spring框架参考手册(4.2.6版本)翻译——第三部分核心技术6.6自定义bean的特性6.6.1生命周期回调

...期回调要与容器的bean生命周期管理进行交互,可以实现Spring的InitializingBean和DisposableBean接口。对于前者,容器会调用afterPropertiesSet(),对于后者,容器会调用destroy()以允许bean在初始化和销毁bean时执行某些操作。注意:JSR-250@PostC... 查看详情

spring框架参考手册(4.2.6版本)翻译——第三部分核心技术6.5.4请求(request)会话(session)和全局会话(globalsession)作用域

...ion)作用域请求,会话和全局会话作用域仅在您使用Web的SpringApplicationContext实现(例如XmlWebApplicationContext)时可用。如果将这些作用域与常规的SpringIoC容器(如ClassPathXmlApplicationContext)一起使用,则会出现Ille 查看详情

spring框架参考手册(4.2.6版本)翻译——第三部分核心技术6.5bean的作用域

6.1 Bean的作用域当你创建一个Bean的定义,你就为这个Bean定义的类创建了一个配方。Bean的定义是一个配方的想法是重要的,因为这意味着,你可以通过这个配方创建许多对象实例。您不仅可以控制要插入到从特定bean定义创建... 查看详情

spring框架参考手册(4.2.6版本)翻译——第三部分核心技术6.4.3depends-on的使用

6.4.3 depends-on的使用如果bean是另一个bean的依赖项,常常意味着将一个bean设置为另一个bean的属性。典型地,你可以使用基于XML的配置元数据中的<ref/>元素来完成此操作。但是,有时bean之间的依赖关系不那么直接;例如,... 查看详情

spring框架参考手册(4.2.6版本)翻译——第三部分核心技术6.5.3依赖于原型bean的单例bean

6.5.3依赖于原型Bean的单例Bean当您使用具有依赖于原型bean的单例bean时,请注意在实例化时解析依赖项。因此,如果将原型作用域的bean注入到单例作用域的bean中,则会实例化一个新的原型bean,然后将依赖注入到单例bean中。原型... 查看详情

spring框架参考手册翻译——第三部分核心技术6.1springioc容器和bean的介绍

第三部分核心技术  这部分参考文档涵盖的这些技术是SpringFramework绝对重要的。  其中最重要的要数Spring框架的控制反转(IoC)容器。深入剖析Spring框架IoC容器之后,紧接着要介绍的是Spring面向切面编程(AOP)技术。Spring框... 查看详情

stk《connect命令参考手册》首发

要想深层次使用stk,connect指令是必不可少的。stk帮助文档里有connect指令详细使用说明,但都是英文,看起来很不方便。去年翻译了一部分,大概翻译了一半,还有很多没有翻译。现在没有精力搞这个了,... 查看详情

centos6.0的内核版本是多少

参考技术ACENTOS6.0/RHEL6Update0——————2.6.32-71以下是RedHat/CentOS发行版本号及内核版本号对照表Redhat9.0———————————————2.4.20-8RHEL3Update8————————————2.4.21-47RHEL4————————————————2.... 查看详情

意法半导体官网上找不到stm32的中文参考手册和数据手册,要怎么办?

参考技术A解决方案一:找ST的FAE。如果你用量够大,FAE什么都会为你做。解决方案二:在国内网站搜索中文版本的资料,如果有人义务翻译的话……要留心翻译错误(虽然st的文档本身错误就很多)。解决方案三:寄希望于自动... 查看详情

Maven:缺少工件 org.springframework:spring:jar:4.2.6

】Maven:缺少工件org.springframework:spring:jar:4.2.6【英文标题】:Maven:missingartifactorg.springframework:spring:jar:4.2.6【发布时间】:2016-09-1313:07:44【问题描述】:我在SpringToolSuite中有一个动态Web项目。它被转换为一个Maven项目。我遇到了问... 查看详情