7.4.5 Autowiring collaborators

Spring容器可以自动(autowire)关联协作(collaborating)bean。您可以通过检查ApplicationContext的内容来允许Spring自动解析您的bean的协作者(其他bean)。autowiring具有以下优点:

  • 自动装配可以显着减少指定属性或构造函数参数的需要。
  • 自动装配可以随着对象的发展而更新配置。例如,如果您需要向类添加依赖关系,则可以自动满足该依赖关系,而无需修改配置。因此,自动装配在开发过程中特别有用,而在代码库变得更加稳定时,无需切换到显式autowiring 。

当使用基于XML的配置元数据[2]时,您可以使用<bean />元素的autowire属性为bean定义指定自动连接模式。自动连线功能有四种模式。您可以指定每个bean的自动布线,因此可以选择要自动连线的。

Table 7.2. Autowiring modes

ModeExplanation

no      

(默认)无自动接线。 Bean引用必须通过ref元素定义。不建议更改默认设置用于较大的部署,因为明确指定协作者可以更好地控制和清晰。在某种程度上,它记录了系统的结构。 

byNa me     

按属性名称自动装配。Spring会找到一个与需要自动连线的属性名称相同的bean。例如,如果bean定义通过名称设置为autowire,并且它包含master属性(即具有setMaster(..)方法),Spring寻找一个名为master的bean定义,并使用它来设置属性。

byType

如果容器中存在属性类型的一个bean,则允许属性自动连接。如果存在多个,则会抛出一个致命异常,这表示您可能不会对该bean使用byType自动连线。如果没有匹配的bean,没有任何反应;该属性未设置。

constructor

类似于byType,但适用于构造函数参数。如果在容器中没有一个构造函数参数类型的bean,则会引起致命错误。

 使用byType或构造函数自动布线模式,可以对数组和类型集合进行连线。在这种情况下,提供符合预期类型的​​容器内的所有自动连线候选者以满足依赖性。果预期的键类型为String,则可以自动连接强类型的Maps。自动连线的地图值将包含与预期类型相匹配的所有bean实例,Maps键将包含相应的bean名称。

您可以将autowire行为与依赖关系检查相结合,这是自动连线完成后执行的。

 

Autowiring的局限性和缺点

  • 属性和构造器参数设置中的显式依赖性总是覆盖自动布线。您不能自动连接所谓的简单属性,例如基元,字符串和类(以及这些简单属性的数组)。这个限制是按设计。
  • autowiring不如显式接线精确。尽管如上表所示,虽然Spring很小心避免在可能出现意想不到的结果的歧义的情况下进行猜测,但是您的Spring管理对象之间的关系不再被明确记录。
  • 对于可能会从Spring容器生成文档的工具可能无法使用接线信息。
  • 容器中的多个bean定义可以匹配由setter方法指定的类型或构造函数参数以进行自动连线。对于数组,集合或地图,这不一定是一个问题。然而,对于期望单个值的依赖性,这种模糊性不是任意解决的。然而,对于期望单个值的依赖性,这种模糊性不是任意解决的。如果没有唯一的bean定义可用,则抛出异常。

从自动装配中排除一个bean

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

 

 

转载于:https://my.oschina.net/u/3372156/blog/1527341

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值