Spring容器能够自动(autowire)关联协做(collaborating)bean。您能够经过检查ApplicationContext的内容来容许Spring自动解析您的bean的协做者(其余bean)。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的局限性和缺点
从自动装配中排除一个bean
在每一个bean的基础上,您能够将bean从自动装配中排除。在Spring的XML格式中,将<bean />元素的autowire-candidate属性设置为false;容器使特定的bean定义不可用于自动布线基础架构(包括注释样式配置,例如@Autowired)。