这是使用构造器注入来装配bean
2、setter注入
这是使用setter注入,p是spring的名称空间,可以用来代替标签。
四、装配的概念
创建应用对象之间协作关系的行为称为装配。也就是说当一个对象的属性是另一个对象时,实例化时,需要为这个对象属性进行实例化,这就是装配。如果一个对象只通过接口来表明依赖关系,那么这种依赖就能够在对象本身毫不知情的情况下,用不同的具体实现进行切换。
五、@Autowired注解
在传统的依赖注入配置中,我们必须要明确要给属性装配哪一个bean的引用,一旦bean很多,就不好维护了。基于这样的场景,spring使用注解来进行自动装
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享
配,解决这个问题。
自动装配就是开发人员不必知道具体要装配哪个bean的引用,这个识别的工作会由spring来完成。与自动装配配合的还有“自动检测”,这 个动作会自动识别哪些类需要被配置成bean,进而来进行装配。这样我们就明白了,自动装配是为了将依赖注入“自动化”的一个简化配置的操作。
六、装配方式共有四种:byName, byType, constructor, autodetect
-
byName 就是会将与属性的名字一样的bean进行装配 (常用)
-
byType 就是将同属性一样类型的bean进行装配 (常用)
-
constructor 就是通过构造器来将类型与参数相同的bean进行装配
-
autodetect 就是constructor与byType的组合,会先进行constructor,如果不成功,再进行byType
具体选择哪一种装配方式,需要配置标签的autowire属性,如果没有配置,默认是byName类型,就是会根据属性的名字来进行自动装配。
自动装配时,装配的bean必须是唯一与属性进行吻合的,不能多也不能少,有且只有一个可以进行装配的bean,才能自动装配成功。否则会抛出异常。如果要统一所有bean的自动装配类型,可以在标签中配置default-autowire属性。当然如果配置了autowire属性,我们依然可以手动装配属性,手动装配会覆盖自动装配。
七、 常用的自动装配注解有以下五种:
@Autowired与@Qualifier是spring提供的,@Inject、@Named与@Resource 都是java ee提供的。
1、@Autowired
@Autowired注解是byType类型的,这个注解可以用在属性上面,setter上面以及构造器上面。使用这个注解时,就不需要在类中为属性添加setter方法了。但是这个属性是强制性的,也就是说必须得装配上,如果没有找到合适的bean能够装配上,就会抛出异常。此时需要进一步明确要装配哪一个Bean,这时可以组合使用@Qualifier注解,值为Bean的名字即可。
2、@Qualifier
@Qualifier注解使用byName进行装配,这样可以在多个类型一样的bean中,明确使用哪一个名字的bean来进行装配,@Qualifier注解起到了缩小自动装配候选bean的范围的作用。