Spring 2.5 引入了 @Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,get方法。
@Autowired 默认是按照byType进行注入的,但是当byType方式找到了多个符合的bean,又是怎么处理的?
经过一些代码的的测试,Autowired默认先按byType,如果发现找到多个bean,则,又按照byName方式比对,如果还有多个,则报出异常。
例子:
@Autowired
private ExamUserMapper examUserMapper; - ExamUserMapper是一个接口
1. spring先找类型为ExamUserMapper的bean
2. 如果存在且唯一,则OK;
3. 如果不唯一,在结果集里,寻找name为examUserMapper的bean。因为bean的name有唯一性,所以,到这里应该能确定是否存在满足要求的bean了
@Autowired也可以手动指定按照byName方式注入,使用@Qualifier标签,例如:
@Autowired () @Qualifier ( "baseDao" )
因为bean的name具有唯一性,理论上是byName会快一点,但spring默认使用byType的方式注入,让我很迷惑,确定不了哪一个真的快。具体到实际应用,感觉差别不大,就看大家的习惯
另注:@Resource(这个注解属于J2EE的)的标签,默认是按照byName方式注入的
本文深入探讨了Spring框架中@Autowired注解的功能与用法,包括其默认的按类型注入行为及其在遇到多个匹配Bean时如何尝试按名称注入的备用策略。
1544

被折叠的 条评论
为什么被折叠?



