文章目录
- 前言
- 一、Spring 的基本介绍
- 二、核心容器
- 三、注解开发
- 四、Spring 整合 MyBatis
- 五、AOP
- 六、Spring 事务
- 总结
前言
跟着B站的黑马程序员学习SSM框架,语言为java,目前是第一个学习内容
课程传送门:SSM框架——Spring
一、Spring 的基本介绍
1.Spring 的课程介绍
1.1 为什么要学
1.2 学什么
- 简化开发:IOC、AOP(事务处理)
- 框架整合:MyBatis、MyBatis-plus、Struts、Struts2、Hibernate…
1.3 怎么学
- 学习 Spring 框架设计思想
- 学习基础操作,思考操作与思想间的联系
- 学习案例,熟练应用操作的同时,体会思考
‘
2.初识 Spring
2.1 Spring 家族与 Spring
- 官网:spring.io
- Spring 发展到今天已经形成了一种开发的生态区,Spring 提高了若干个项目,每个项目用于完成特定的功能。
2.2 Spring 发展史
3.Spring 系统架构
- Spring Framework 是 Spring 生态圈最基础的项目,是其他项目的根据
3.1 Spring 系统架构图
3.2 Spring 学习路线
二、核心容器
1.核心概念
1.1 Spring 核心基础概念
1.1.1 现状书写习惯
- 代码书写现状:耦合度偏高
- 解决方案:使用对象时,在程序中不要主动使用 new 产生对象,转换为由外部提供对象。
- IoC(Inversion of Control)控制反转:对象的创建控制权由程序转移到外部,这种思想称为控制反转。
1.1.2 IoC/DI、IoC容器、Bean
-
IoC(Inversion of Control)控制反转:
① 使用对象时,由主动 new 产生对象转换为由外部提供的现象,此过程中对象创建控制权与程序转移到了外部,此思想称为控制反转。 -
Spring 技术对 IoC 思想进行了实现:
① Spring 提供了一个容器,称为 IoC 容器,用来充当 IoC 思想中的 “外部”。
② IoC 容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象在 IoC 容器中统称为 Bean。 -
DI(Dependency Injection)依赖注入:
① 在容器中建立 bean 与 bean 之间的依赖关系的整个过程,称为依赖注入。
1.1.3 总结
-
目标:充分解耦
① 使用 IoC 容器管理 bean(IoC)
② 在 IoC 容器内将有依赖关系的 bean 进行关系绑定(DI) -
最终效果
① 使用对象时不仅可以直接从 IoC 容器中获取,并且获取到的 bean 已经绑定了所有的依赖关系。
1.2 入门案例
1.2.1 IoC 入门案例思路分析
- 管理什么?(Service 与 Dao)
- 如何被管理的对象告知 IoC 容器?(配置)
- 被管理的对象交给 IoC 容器,如何获取到 IoC 容器?(接口)
- IoC 容器得到后,如何从容器中获取 bean?(接口方法)
- 使用 Spring 导入哪些坐标?(pom.xml)
1.2.2 IoC 入门案例实现
① 导入 Spring 坐标
② 定义 Spring 管理的类(接口)
③ 创建 Spring 配置文件,配置对应类作为 Spring 管理的 bean
ps:bean 定义时 id 属性在同一个上下文中不能重复
④ 初始化 IoC 容器(Spring 核心容器/Spring 容器),通过容器获取 bean
1.2.3 DI 入门案例思路分析
- 基于 IoC 管理 bean
- Service 中使用 new 形式创建的 Dao 对象是否保留?(否)
- Service 中需要的 Dao 对象如何进入到 Service 中?(提供方法)
- Service 与 Dao 间的关系如何描述?(配置)
1.2.3 DI 入门案例实现
① 删除使用 new 的形式创建对象的代码
② 提供依赖对象对应的 setter 方法
③ 配置 service 与 dao 之间的关系
2.bean 相关配置
2.1 bean 基础配置
2.2 bean 别名配置
2.2.1 bean 别名配置概述
PS:
2.2.2 bean 别名配置案例
2.3 bean 作用范围配置
2.3.1 bean 作用范围配置概念
2.3.2 bean 作用范围配置案例
2.3.3 bean 作用范围说明
-
为什么 bean 默认为单例?
-
适合交给容器进行管理的 bean
① 表现层对象
② 业务层对象
③ 数据层对象
④ 工具对象 -
不合适交给容器进行管理的 bean
① 封装实体的域对象
3.bean 的实例化
bean 本质上就是对象,创建 bean 使用构造方法完成。
3.1 构造方法(常用)
3.2 静态工厂(了解)
3.3 实例工厂与 FactoryBean
3.3.1 实例工厂(了解)
3.3.2 FactoryBean(实用)
4.bean 生命周期
- 生命周期:从创建到消亡的完整过程
- bean 生命周期:bean 从创建到销毁的整体过程
- bean 生命周期控制:在 bean 创建后到销毁前做一些事情
-
初始化容器
1-创建对象(内存分配)
2-执行构造方法
3-执行属性注入(set操作)
4-执行 bean 初始化方法 -
使用bean
1-执行业务操作 -
关闭 / 销毁容器
1- 执行 bean 销毁方法
4.1 bean 生命周期控制
-
bean 生命周期配置
配置:init-method、destroy-method
接口(了解):InitializingBean、DisposableBean -
关闭容器
ConfigurableApplicationContext:close( )、registerShutdownHook( )
4.1.1 bean 生命周期控制——接口控制(了解)
4.1.2 bean 销毁时机
5.依赖注入方式
-
思考:向一个类中传递数据的方式有几种?
普通方法(set方法)
构造方法 -
思考:依赖注入描述了在容器中建立 bean 和 bean 之间依赖关系的过程,如果 bean 运行需要的是数字或字符串呢?
引用类型
简单类型(基本数据类型与 String) -
依赖注入方式
1、setter 注入:简单类型、引用类型
2、构造器注入:简单类型、引用类型
5.1 setter 注入
5.1.1 setter注入——引用类型
5.1.2 setter 注入——简单类型
5.2 构造器注入
5.2.1 构造器注入——引用类型(了解)
5.2.2 构造器注入——简单类型(了解)
5.2.3 构造器注入——参数适配(了解)
5.3 依赖注入方式选择
- 强制依赖使用构造器进行,使用 setter 注入有概率不进行注入导致 null 对象出现;
- 可选依赖使用 setter 注入进行,灵活性强;
- Spring 框架倡导使用构造器,第三方框架内部大多数采用构造器注入的形式进行数据初始化,相对严谨;
- 如果有必要可以两者同时使用,使用构造器注入完成强制依赖的注入,使用 setter 注入完成可选依赖的注入;
- 实际开发过程中,还要根据实际情况分析,如果受控对象没有提供 setter 方法就使用构造器注入;
- 自己开发的模块推荐使用 setter 注入;
6. 依赖自动配置
- IoC 容器根据 bean 所依赖的资源在容器中自动查找并注入到 bean 中的过程称为自动配置
- 自动装配方式
① 按类型(常用)
② 按名称
③ 按构造方法
④ 不启动自动配置
6.1 依赖自动装配特征
- 自动装配用于引用类型依赖注入,不能对简单类型进行操作;
- 使用**按类型装配时(byType)**必须保障容器中相同类型的 bean 唯一,推荐使用;
- 使用按名称装配时(byName)必须保障容器中具有指定名称的 bean,因变量名与配置耦合,不推荐使用;
- 自动配置优先级低于 setter 注入和构造器注入,同时出现时自动装置配置失效;
7. 注入集合对象
7.1 数组
7.2 List
7.3 Set
7.4 Map
7.5 Properties
8. 加载 properties 文件
8.1 加载 properties 配置文件信息
8.2 开启命名空间方式
9. 容器
9.1 创建容器
9.2 获取 bean(3种)
9.3 容器类层次结构
9.4 BeanFactory
10 核心容器总结
10.1 容器相关
10.2 bean 相关
10.3 依赖注入相关
三、注解开发
1. 注解开发
1.定义 bean
- @Component
1-@Controller
2-@Service
3-@Repository - < context:component-scan>
2.纯注解开发
- @Configuration
- @ComponentScan
- AnnotationConfigApplicationContext
1.1 注解开发定义 bean
1.2 纯注解开发
2. bean 管理
2.1 bean 作用范围
2.2 bean 生命周期
3. 依赖注入
3.1 自动装配
3.1.1 Autowired
3.1.2 @Qualifier
3.1.3 @Value
3.2 读取 properties 文件
3.2.1 @PropertySource
4. 第三方 bean 管理
4.1 第三方 bean 管理
使用 @Bean 配置第三方 bean
使用依赖的配置类管理第三方 bean
将独立的配置类加入核心配置
4.2 第三方 bean 依赖注入
简单类型:成员变量
引用类型:方法形参
5. XML 配置比对注解配置
四、Spring 整合 MyBatis
1. Spring 整合 MyBatis 思路分析
1.1 MyBatis 程序核心对象分析
1.2 整合 MyBatis
2. Spring 整合 MyBatis
2.1 整合 MyBatis 的具体步骤
2.1.1 先添加 MyBatis 的坐标
2.1.2 Spring 正常开发
2.1.3 正常添加数据源
2.1.4 添加配置类
2.2 整合 MyBatis
2.2.1 SqlSessionFactoryBean
2.2.2 MapperScannerConfigurer
3. 整合 Junit
3.1 整合 Junit 的具体步骤
3.1.1 添加所需的坐标
3.1.2 使用两个固定的注解
3.2 @Run with、@ContextConfiguration
五、AOP
1. AOP 简介
1.1 AOP 概念
- AOP(Aspect Oriented Programming)面向切面编程,一种编程范式,指导开发者如何组织程序结构
OOP(Object Oriented Programming)面向对象编程 - 作用:在不惊动原始设计的基础上为其进行功能增强
- Spring 理念:无入侵式 / 无侵入式
1.2 AOP 作用
1.3 AOP 核心概念
-
连接点(JoinPoint):程序执行过程中的任意位置,粒度为执行方法、抛出异常、设置变量等
1---- 在 SpringAOP 中,理解为方法的执行 -
切入点(Pointcut):匹配连接点的式子
1---- 在 SpringAOP 中,一个切入点可以只描述一个具体方法,也可以匹配多个方法
①---- 一个具体方法:com.itheima.dao 包下的 BookDao 接口中的无形参无返回值的 save 方法
②---- 匹配多个方法:所有的 save 方法,所有的 get 开头的方法,所有以 Dao 结尾的接口中的任意方法,所有带有一个参数的方法 -
通知(Advice):在切入点处执行的操作,也就是共性功能
1---- 在 SpringAOP 中,功能最终以方法的形式呈现 -
通知类:定义通知的类
-
切面(Aspect):描述通知与切入点的对应关系
2. AOP入门案例
2.1 入门案例思路分析
案例设定:测试接口执行效率
简化开发:在接口执行前输出当前系统时间
开发模式:XML or 注解
思路分析:
1.导入坐标(pom.xml)
2.制作连接点(原始操作,Dao接口与实现类)
3.制作共性功能(通过类与通知)
4.定义切入点
5.绑定切入点与通知关系(切面)
2.2 入门案例实现
① 导入 aop 相关坐标
② 定义 dao 接口与实现类
③ 定义通知类,制作通知
④ 定义切入点
⑤ 绑定切入点与通知关系,并指定通知添加到原始连接点的具体执行位置
⑥ 定义通知类受 Spring 容器管理,并定义当前类为切面类
⑦ 开启 Spring 对 AOP 注解驱动支持
3. AOP 工作流程
3.1 AOP 工作流程
3.2 AOP 核心概念
- 目标对象(Target):原始功能去掉共性功能对应的类产生的对象,这种对象是无法直接完成最终工作的。
- 代理(Proxy):目标对象无法直接完成工作,需要对其进行功能回填,通过原始对象的代理对象实现。
4. AOP 切入点表达式
- 切入点:要进行增强的方法
- 切入点表达式:要进行增强的方法的描述方式
4.1 语法格式
- 切入点表达式标准格式:动作关键字(访问修饰符 返回值 包名.类 / 接口名.方法名(参数)异常名)
4.2 通配符
- 可以使用通配符描述切入点,快速描述
4.3 书写技巧
5. AOP 通知类型
5.1 前置通知
5.2 后置通知
5.3 环绕通知(重点)
5.3.1 @Around 注意事项
5.4 返回后通知(了解)
5.5 抛出异常后通知(了解)
6. 案例:业务层接口执行效率
6.1 案例执行步骤
7. AOP 通知获取数据
7.1 获取参数数据
7.2 获取返回值数据
7.3 获取异常数据(了解)
8. 案例:百度网盘密码数据兼容处理
8.1 案例执行步骤
9. AOP 总结
9.1 概念
AOP(Aspect Oriented Programming)面向切面编程,一种编程范式
9.2 作用
在不惊动原始设计的基础上进行功能增强
9.3 核心概念
9.4 切入点
9.5 通知类别
9.6 通知获取数据
六、Spring 事务
6.1 Spring 事务简介
- 事务作用:在数据层保障一系列的数据库操作同成功同失败
- Spring 事务作用:在数据层或业务层保障一系列的数据库操作同成功同失败
案例:银行账户转账
① 在业务层接口上添加 Spring 事务管理
② 设置事务管理器
③ 开启注解式事务驱动
6.2 Spring 事务角色
- 事务管理员:发起事务方,在 Spring 中通常指代业务层开启事务的方法
- 事务协调员:加入事务方,在 Spring 中通常指代数据层方法,也可以是业务层方法
6.3 事务相关配置
6.3.1 事务配置
6.3.2 案例:转账业务追加日志
6.3.3 事务传播行为
总结
以上就是本章要讲的内容,本文仅仅简单复述了老师讲课的文本内容,内容有误麻烦联系。