第二周笔记
一、Bean的装配方式——Bean的依赖注入
红色方框中用到了Bean的装配
1、DI依赖注入
1.什么是DI ?
DI ( Dependency Injection)“依赖注入” 是实现IoC的方法。是由IoC容器在运行期间,动态地将被依赖的对象注入到需要的对象之中,从而实现对象之间的解耦。
2.Bean的装配实现方法:
电脑依赖外部设备实现扩展功能时,只要挂接的外部设备符合USB接口标准,由使用者(第三方)插入电脑接口中即可。
**USB连接方式的特点**
- 电脑和外部设备相互独立,电脑可以依赖外部设备扩展功能。
- 通用便捷,需要使用时只需将外部设备用USB接口连接上电脑即可。
3.DI核心思想:
依赖对象需要被依赖对象实现扩展功能时,只要有符合标准的注入接口, IoC容器即会自动将被依赖对象注入到依赖对象中。
4.DI依赖注入优点:
<1>使依赖对象和被依赖对象之间相互独立,降低耦合性。
<2>使用方便, 依赖对象需要使用被依赖对象时, IoC容器自动从注入接口注入被依赖对象。
2、XML装配方法
Spring支持两种Bean的装配方式:XML方式和注解方式
1.示例1:设值注入
设值注入的必须条件:
**Bean类必须有一个无参构造方法;Bean类必须为属性提供setter方法。**详情如下图
设值注入就是通过成员变量的set方法进行注入
设值注入xml,(对象用ref)固定的值用value
2.示例2:构造注入
构造注入是通过构造方法赋值的。
如何通过构造器直接为业务类注入所依赖的数据访问层对象,实现保存用户数据的功能?
**构造注入的必须条件:**创建带参构造方法。(编写带参构造方法后,Java虚拟机不再提供默认的无参构造方法,为了保证使用的灵活性,建议自行添加一个无参构造方法)
当写一个带参构造函数,也要手动添加一个无参构造函数
如果创建了一个有参构造函数的情况下,不手动添加无参构造函数,则出现如下图的报错(即没有默认的构造函数)
特别注意:index下标,从0开始
3、xml的2种装配方法,对比总结
1.构造注入和设值注入的主要区别就是体现在service类的实现类里和配置文件里
2.Spring通过setter访问器实现对属性的赋值,这种做法称为设值注入;Spring还提供了通过构造方法赋值的能力,称为构造注入。使用设值注入时,Spring通过JavaBean的无参构造方法实例化对象。
3.两种方式对比(如下图)
(4)基于xml的装配过程
- 创建Java类,提供有参、无参构造以及属性setter方法;
- 创建Spring配置文件beans5.xml,使用2种方式配置Bean;
- 创建测试类,测试程序。
4、Annotation注解(基于注解的装配方法)
1.什么是Annotation注解?
Annotation注解和基于XML模式的Bean装配目标一样,注解是通过为Bean实现类添加标注的方式对Bean进行装配的方法。(相同点)
2.Annotation注解的优点:
- 注解与Java代码紧密结合,大大精简了配置文件的内容,提升运行速度。
- 在Java代码中即可体现对象依赖关系,无需在Java文件和配置文件中切换,提高了开发效率。
3.IoC的常用注解(如下图)
注解是标在类上面使用的
(1)注解的使用:示例@Component :
(2)使用注解,导入aop包
(3)使用注解的xml文件如何写?
在Spring的Spring\docs\spring-framework-reference目录下,找到并打开index.html,选择core–>1.9. Annotation-based Container Configuration–>复制红色方框中的内容,粘贴到xml文件即可。
(4)示例
5、学习中遇到的报错
1.报错–导包不齐
“ nested exception is java.lang.NoClassDefFoundError: org/springframework/aop/TargetSource”
6、小结
7、本课知识问答
提问(需要掌握的基础):
1.bean是什么
2.bean的生命周期的意义
3.Bean有哪几种作用域
4.说一说Singleton作用域的应用场景
5.Prototype作用域的特点和应用场景
6.Bean有哪几种装配方式
7.你喜欢基于XML的装配方式还是基于注解的装配方式呢?
8.说一说使用注解有什么好处。
9.XML和注解的装配方式的异同