SpringFramework官方文档中文版—Core_part_2

更新时间:2023-06-09 09:50:49 阅读: 评论:0

SpringFramework官⽅⽂档中⽂版—Core_part_2
内容过长,core部分分开发布,core章节第1部分点击:Spring Framework 官⽅⽂档中⽂版—Core_part_1
主⽬录或专题地址可以点击:主⽬录, 专题地址
⾃动装(A utowir ing)配协作者
Spring容器可以⾃动装配协作bean之间的关系。你可以通过检查ApplicationContext的内容,让Spring⾃动为你的bean解析协作者(即其他bean)。⾃动装配有以下优点:
⾃动装配可以显著减少指定属性或构造⽅法的场景。
⾃动装配可以随着你的对象改变⽽改变。例如,你需要往⼀个类中增加依赖,那么⽆需修改配置就可以⾃动满⾜这个需求。因此⾃动装配在开发过程中⾮常有⽤,当代码库趋于稳定时,不需要否定显⽰的装配。(最后⼀句原⽂:Thus autowiring can be especially uful during development, without negating the option of switching to explicit wiring when the code ba becomes more stable.)
当使⽤基于XML的配置时,你需要在<bean/>标签内指定属性autowire。⾃动装配功能有4种模式。你可以为每个bean单独指定⾃动装配,所以也就可以选择其中⼀个进⾏⾃动装配。
下⾯是⾃动装配的4种模式:
说明
os是什么意思tiffany是什么意思no (默认)不⾃动装配。bean的引⽤必须通过ref属性标签来指定。对于较⼤型的项⽬,并不推荐修改此默认配置,因为明确的指定bean可以更易于管理和更可控。在某种意义上,这相当于是记录了系统的结构
byN ame 根据名称⾃动装配。Spring⾃动寻找同名的bean作为需要装配的属性。例如,如果设置了⼀个bean定义为byName ⾃动装配,并且含有⼀个master属性(也就是说它有⼀个tMaster(..)⽅法) ,Spring寻找到名称为master的bean定义,并设置到其属性中
byT ype 如果容器中恰好和属性类型相同的bean,那么允许将这个bean⾃动装配到属性。如果这种bean的数量为多个则会抛出异常,表明你并不适合⽤词类型的⾃动装配,如果没有此类型的bean匹配,则不会发⽣什么异常,属性也就有可能没有被设置
con
stru
ctor
和bytype类似,但是是⽤于构造函数参数,如果容器中没有⼀个和构造函数参数类型⼀样的bean,则会引发致命异常
使⽤byType 或 constructor ⾃动装配模式,你可以装配数组和集合类型。这种情况下,容器内所有与预期类型匹配的bean都会被装配⾄此数据或集合。你可以⾃动装配强类型的map,如果key类型正好的String。⾃动装配的map的value是由和预期类型⼀样的bean组成,key的值会包含bean的名称。
electronic是什么意思你可以将⾃动装配的⾏为与依赖检查相结合,依赖检查是在⾃动装配结束后开始执⾏的。
⾃动装配的局限性和缺点*lawyers
⾃动装配在项⽬中应⽤时,要么全部使⽤,不要部分使⽤。如果⼀般不使⽤⾃动装配,只是在少数的⼀两个bean定义中使⽤它,⾃动装配可能会让开发者产⽣混淆。
考虑⾃动装配的局限性和缺点:crosswalks
property 和 constructor-arg中明确的依赖会覆盖⾃动装配。你不能⾃动装配简单类型的属性,如原始类型,String,Class(以及这些简单类型组成的数组)。这个局限是因为就是这么设计的
明确的装配要⽐⾃动装配准确。尽管如上⾯的表所⽰,Spring⼩⼼的避免猜测所导致预期外的结果,但是项⽬中被Spring管理的对象关系并不会被明确记录。
可能⽆法从Spring容器⽣成⽂档的⼯具获得使⽤连接信息。
tter⽅法或构造函数所指的的类型,容器中可能会存在多个bean匹配上。对于数组,集合或map来说这并不是⼀个问题。然⽽对依赖来说只需要⼀个结果的话,这并不会被有效的解决。如果⾮唯⼀值存在,则会抛出致命的异常。
在下⾯,你可以有以下⼏个选择:
october是什么意思放弃⾃动装配,全部使⽤显⽰的(常规)装配
将其autowire-candidate属性设置为fal,避免bean定义进⾏⾃动装配,如下⼀节所⽰。
指派⼀个单独的bean定义作为主要对象,需要将<bean/>标签的属性primary属性设置为true。
使⽤基于注解的容器配置,实现更细粒度的配置。
网站设计远程培训
⾃动装配中排除⼀个bean
基于每个bean的配置,你可以将⼀个bean从⾃动装配中排除。在Spring XML格式中,设置<bean/>标签中的属性autowire-candidate为fal;容器会让此bean定义⽆法进⾏⾃动装配(包括注解风格的配置例如@Autowired)。
属性autowire-candidate只对基于类型的⾃动装配有效。它不对明确的装配例如byName类型的⾃动装配有效,即使某bean 没有被标记为autowire选项,它也会被解析。因此,只要名称匹配,⾃动装配总会注⼊⼀个bean。
你也可以利⽤表达式来限制⾃动装配候选者的名称。最顶层标签<beans/>的default-autowire-candidates属性接受⼀个或多个表达式。例如,限制候选bean的名称是以 Repository 结尾,只需要将表达式写为 *Repository 。要写⼊多个表达式,则表达式之间⽤逗号分隔。对于⼀个bean定义来说,明确指定autowire-candidate属性的值为true或fal总是优先的,对于这个bean定义来说,表达式匹配规则并不⽣效。
这些技术,对于那些你不希望通过⾃动装配注⼊到其他bean的bean⼗分有⽤。这并不意味着被排除的bean,本⾝不能配置⾃动装配。相反的,⽽是bean本⾝不是其他⾃动装配bean的候选者。
考前准备
⽅法注⼊(Me thod inj e ction)
the next is new
⼤多数应⽤场景中,容器中⼤部分bean都是单例的。当⼀个单例的bean,需要另⼀个单例bean协作,或者⼀个⾮单例bean需要另⼀个⾮单例bean协作,你通常通过定义⼀个bean作为另⼀个bean的属性来处理这种依赖关系。当bean的⽣命周期不同时问题就出现了。假设⼀个单例bean A需要⼀个⾮单例的bean B,也许A的每个⽅法都调⽤了。容器只创建bean A⼀次,因此也就只有⼀次机会来设置A的属性。当需要时,容器不⼀定能为bean A提供⼀个新的bean B的实例。niceday是什么意思
⼀个解决办法是放弃⼀些控制反转。你可以通过实现ApplicationContextAware接⼝,创建⼀个bean A aware(此单词不翻译,直译为:知道的,了解的),当bean A需要beanB的时候,容器调⽤getBean("B")⽅法来获得bean B。下⾯是相关的例⼦:

本文发布于:2023-06-09 09:50:49,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/139089.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:装配   属性   类型   需要   容器   配置   依赖   例如
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图