Spring

133 阅读4分钟

前言:Spring Framework 系统架构

截屏2023-11-26 16.46.26.png

学习路线

  • 核心容器:核心概念(IoC/DI)、容器基本操作
  • 整合:整合数据层技术 MyBatis
  • AOP:核心概念、AOP基础操作、AOP实用开发
  • 事务:事务实用开发

一、核心容器

1.1 核心概念

IoC (Inversion of Control) 控制反转:
使用对象时,在程序中不要主动使用new产生对象,转换为由外部提供对象。(对数据层和业务实现层降低耦合度)
DI(Dependency Injection) 依赖注入:
在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入

  • Spring技术对IoC思想进行了实现
    • Spring 提供了一个容器,称为Ioc容器,用来充当IoC思想中的“外部”。
    • IoC容器负责对象的创建、初始化等一系列工作,被创建或管理的对象在IoC容器中统称为Bean。

截屏2023-11-26 17.02.41.png

1.2 IoC入门案例

截屏2023-11-26 17.05.45.png

1.3 bean基础配置

bean作用范围说明
为什么bean默认为单例?
适合交给容器进行管理的bean:表现层对象、业务层对象、数据层对象、工具对象。
不适合交给容器进行管理的bean:封装实体的域对象。

1.4 bean实例化

bean的本质是对象,可使用构造方法实例化。

  1. 构造方法:提供可访问的构造方法
  2. 使用静态工厂实例化bean
  3. 实例工厂实例化bean

1.5 bean的生命周期

截屏2023-11-26 21.00.51.png

截屏2023-11-26 21.01.14.png

bean 生命周期

  • 初始化容器
      1. 创建对象(内存分配)
      1. 执行构造方法
      1. 执行属性注入(set操作)
      1. 执行bean初始化方法
  • 使用bean
    • 执行业务操作
  • 关闭/销毁容器
    • 执行bean销毁操作

截屏2023-11-26 21.04.23.png

1.6 setter注入

向一个类中传递数据的方式有几种:普通方法(set方法)、构造方法

截屏2023-11-26 21.38.40.png

1.7 构造器注入

截屏2023-11-26 21.42.46.png

依赖注入方式选择

  1. 强制依赖使用构造器进行,使用setter注入有概率不进行注入导致null对象出现。
  2. 可选依赖使用setter注入进行,灵活性强。
  3. Spring框架倡导使用构造器,第三方框架内不大多数采用构造器注入的形式进行数据初始化,相对严谨。
  4. 如果有必要可以两者同时使用,使用构造器注入完成强制依赖的注入,使用setter注入完成可选依赖的注入。
  5. 实际开发过程中还要根据实际情况分析,如果受控对象没有提供setter方法就必须使用构造器注入。
  6. 自己开发的模块推荐使用setter注入。

1.8 依赖自动装配

IoC 容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程称为自动装配。
自动装配方式:

  • 按类型(常用)
  • 按名称
  • 按构造方法
  • 不启用自动装配

截屏2023-11-28 15.25.31.png

依赖自动装配特征

  • 自动装配用于引用类型依赖注入,不能对简单类型进行操作
  • 使用按类型装配时(byType)必须保障容器中相同类型的bean唯一,推荐使用
  • 使用按名称装配时(byName)必须保障容器中具有指定名称的bean,因变量名与配置耦合,不推荐使用
  • 自动装配优先级低于setter注入与构造器注入,同时出现时自动装配配置失效

1.9 案例:数据源对象管理

截屏2023-11-28 16.24.57.png

1.10 加载properties文件

截屏2023-11-28 19.02.43.png

截屏2023-11-28 19.05.36.png

1.11 容器

    1. 创建容器 截屏2023-11-28 19.16.57.png
    1. 获取bean的方式 截屏2023-11-28 19.17.53.png
    1. 容器类层次结构图 截屏2023-11-28 19.21.26.png
    1. BeanFactory初始化 截屏2023-11-28 19.22.47.png

1.12 核心容器总结

    1. 容器相关 截屏2023-11-28 19.25.26.png
    1. bean相关 截屏2023-11-28 19.26.17.png
    1. 依赖注入 截屏2023-11-28 19.27.16.png

二、注解

2.1 注解开发定义bean

截屏2023-11-28 20.24.16.png

截屏2023-11-28 20.25.25.png

2.2 纯注解开发

截屏2023-11-28 20.31.39.png

截屏2023-11-28 20.32.18.png

2.3 bean管理

    1. bean的作用范围 截屏2023-11-28 20.45.37.png
    1. bean的生命周期 截屏2023-11-28 20.46.09.png

2.4 依赖注入

截屏2023-11-28 20.52.41.png

截屏2023-11-28 20.53.16.png

截屏2023-11-28 20.53.52.png

截屏2023-11-28 20.54.44.png

2.5 第三方bean管理

不建议这种方式 截屏2023-11-28 21.11.45.png 改用 截屏2023-11-28 21.12.37.png

截屏2023-11-28 21.13.19.png

截屏2023-11-28 21.15.11.png

截屏2023-11-28 21.15.25.png

2.6 注解开发总结

截屏2023-11-28 21.16.00.png

三、AOP简介

3.1 AOP核心概念

截屏2023-11-28 21.37.51.png 截屏2023-11-28 21.38.13.png

3.2 AOP入门案例

截屏2023-11-28 21.40.20.png

截屏2023-12-01 22.15.18.png 截屏2023-12-01 22.15.38.png 截屏2023-12-01 22.16.52.png 截屏2023-12-01 22.17.44.png 截屏2023-12-01 22.18.14.png 截屏2023-12-01 22.19.41.png

3.3 AOP工作流程

截屏2023-12-02 14.04.11.png

  • 目标对象(Target):原始功能去掉共性功能对应的类产生的对象,这种对象是无法直接完成最终工作的
  • 代理(Proxy):目标对象无法直接完成工作,需要对其进行功能回填,通过原始对象的代理对象实现

3.4 AOP切入点表达式

截屏2023-12-02 14.15.37.png 截屏2023-12-02 14.16.43.png 截屏2023-12-02 14.25.49.png 截屏2023-12-02 14.30.01.png

3.5 AOP通知类型

截屏2023-12-02 14.40.36.png 截屏2023-12-02 14.47.07.png 截屏2023-12-02 14.47.24.png 截屏2023-12-02 14.48.07.png

3.6 AOP通知获取数据

截屏2023-12-02 16.36.38.png 截屏2023-12-02 16.38.31.png 截屏2023-12-02 16.38.53.png

四、Spring事务

4.1 Spring 事务简介

截屏2023-12-02 17.01.03.png

4.2 案例

截屏2023-12-02 17.01.42.png 截屏2023-12-02 17.02.53.png 截屏2023-12-02 17.03.21.png

截屏2023-12-02 17.04.03.png

4.3 Spring事务角色

截屏2023-12-02 17.06.05.png 截屏2023-12-02 17.06.40.png

4.4 Spring事务属性

截屏2023-12-02 17.13.16.png 截屏2023-12-02 17.13.43.png

截屏2023-12-02 17.14.46.png