赞
踩
在依赖注入上除了前面我们讲的手动注入的情况,Spring还非常智能地为我们提供自动向Bean注入依赖的功能,这个过程一般被称为自动装配(autowiring)。这是一个非常酷的功能,当注入的bean特别多时,它将极大地节省编写注入程序的时间,因此在开发中,非常常见。但是个人来讲,我自己还是不太喜欢用自动装配,怕出错!我喜欢在代码中明确写清楚!
Spring的自动装配有三种模式,在标签的atuowire属性里配置:byTpye(根据类型),byName(根据名称)、constructor(根据构造函数)。
在byTpye模式中,Spring容器会基于反射查看bean定义的类,然后找到与依赖类型相同的bean注入到另外的bean中,这个过程需要借助setter注入来完成,因此必须存在set方法,否则注入失败。
注意问题:
事实上byType模式可能存一种注入失败的情况,由于是基于类型的注入,因此当xml文件中存在多个相同类型名称不同的实例Bean时,Spring容器依赖注入仍然会失败,因为存在多种适合的选项,Spring容器无法知道该注入那种,此时我们需要为Spring容器提供帮助,指定注入那个Bean实例。可以通过<bean>标签的autowire-candidate设置为false来过滤那些不需要注入的实例Bean
需要了解的是如果Spring容器中没有找到可以注入的实例bean时,将不会向依赖属性值注入任何bean,这时依赖bean的属性可能为null,因此我们需要小心处理这种情况,避免不必要的奔溃。
对于constructor模式,在该模式下Spring容器同样会尝试找到那些类型与构造函数相同匹配的bean然后注入。但是用这种模式,将会写很多构造方法,显得复杂,所以不推荐使用,有兴趣的同学,下去写一下demo测试一下就行了,这里就不讲了!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。