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函数

Mode Explanation

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)。

相关文章
相关标签/搜索