Spring5入门笔记

news/2024/11/30 6:40:21/

Spring5

Spring概念

①Spring是轻量级得开源得JavaEE框架

②Spring解决企业应用开发得复杂性

③Spring有两个核心部分:IOC和Aop

  • IOC: 控制反转,把创建对象过程交给Spring管理
  • Aop: 面向切面, 不修改源代码进行功能增强

④Spring特点

  • 方便解耦, 简化开发
  • Aop编程支持
  • 方便程序测试
  • 方便和其他框架整合
  • 方便进行事务操作
  • 降低API开发难度

IOC

IOC容器(原理)

①什么是IOC

  • 控制反转, 把对象创建和对象之间得调用过程,交给Spring管理
  • 使用IOC目的: 为了耦合度降低

②IOC底层原理

  • xml解析,工厂模式,反射

③图片解析

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7WQT8QfO-1674046033020)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220516203136118.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SoUvyW2J-1674046033021)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220516203353652.png)]

IOC(接口)

① IOC思想基于IOC容器完成,IOC容器底层就是对象工厂

② Spring提供IOC容器实现两种方式:(两个接口)

  1. BeanFactory : IOC容器基本实现,是spring内部得使用接口,不提供开发人员使用
    • 加载配置文件时候不会创建对象,在获取对象(使用)才会去创建对象
  2. ApplicationContext : BeanFactory 接口得子接口,提供更多更强大得功能,一般由开发人员使用
    • 加载配置文件时候就会创建对象

​ 3.ApplicationContext 接口有实现类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xahSlYI6-1674046033021)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220516204817071.png)]

IOC操作Bean管理

  1. 什么是Bean管理

    • Bean管理指得是两个操作

      • Spring创建对象

      • Spring注入属性

  2. Bean管理操作有两种方式

    • 基于xml配置文件方式实现
    • 基于注解方式实现

IOC操作Bean管理(基于xml实现)

  1. 基于xml方式创建对象
    1. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eKlPYRAp-1674046033022)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220516203136118.png)]
    2. 在spring配置文件中,使用bean标签,标签里面添加对应属性,就可以实现对象创建
    3. 在bean标签有很多属性,常用属性
      • id属性:唯一标签
      • class属性:类全路径(包类路径)
    4. 创建对象时候,默认也是执行无参数构造方法完成对象创建
  2. 基于xml方式注入属性
    1. DI : 依赖注入,就是注入属性
      • 使用set方法进行注入
        1. 创建类 , 定义属性和对应得set方法
          • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vk70nhOx-1674046033023)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220516221131514.png)]
        2. 在spring配置文件配置对象创建, 配置属性注入
          • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WzsO4Juy-1674046033023)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220516221456188.png)]
      • 使用有参数构造进行注入
        1. 创建类,定义属性,创建属性对应有参数构造方法
          • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UdLLriNY-1674046033024)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220516221952353.png)]
        2. 在spring配置文件中进行配置
          • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0Hgw3wwG-1674046033024)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220516222221191.png)]
    2. p名称空间注入(了解)
      • 使用p名称空间注入,可简化基于xml配置方式
        1. 添加p名字空间在配置文件中
          • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DhXEyoem-1674046033024)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220516222859944.png)]
        2. 进行属性注入,在bean标签里面进行操作(也是set方法)
          • image-20220516223032402
IOC操作Bean管理(xml注入其他类型属性)
  1. 字面量

    1. null值

      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nZ5SjHzG-1674046033025)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220516224725262.png)]
    2. 属性值包含特殊符号

      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H34KD1UM-1674046033025)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220516225124012.png)]
  2. 注入属性-外部bean****

    1. 创建两个类service类和dao类
    2. 在service调用到里面得方法
    3. 在spring配置文件中进行配置
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Iyg0EFsN-1674046033025)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517094434189.png)]
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RaMuk59y-1674046033025)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517094510154.png)]
  3. 注入属性-内部bean和级联

    1. 一对多关系 : 部门和员工
    2. 在实体类中表示一对多关系,员工表示所属得部门,使用对象类型属性表示
      1. ​ 部门类
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c4B7Hq2l-1674046033026)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517094957519.png)]
      2. 员工类
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4g1BNG96-1674046033026)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517095119654.png)]
      3. 在spring配置文件中进行相关配置
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-40UeuB9I-1674046033026)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517095553426.png)]
    3. 注入属性-级联赋值
      1. 第一种写法
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sCL0tUkc-1674046033026)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517100455426.png)]
      2. 第二种写法(生成相应类得get()方法)
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6SuZAIV2-1674046033027)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517100729266.png)]
IOC操作Bean管理(xml注入集合属性)
  1. 注入数组类型属性

  2. 注入List集合类型属性

  3. 注入Map集合类型属性

    1. 创建类,定义数组,list,map,set类型属性

      publice class Stu{private String[] courses;private List<String> list;private Map<String,String>maps;private Set<String> sets;//以及一系列得get,set方法
      }
      
      • 数组

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-guLDQRvp-1674046033027)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517102206450.png)]

      • list

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fOOfmxu6-1674046033027)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517102300181.png)]

      • Map

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1v5SLps7-1674046033027)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517102412992.png)]

      • Set

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VMKCCx05-1674046033028)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517102439916.png)]

  4. 在集合里面设置对象类型值

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ClHdSbnj-1674046033028)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517103742420.png)]
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P5IxcTJB-1674046033028)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517103722133.png)]
  5. 把集合注入部分提取出来

    1. 在spring配置文件中引入名称空间 util
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-coWGItzJ-1674046033028)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517104107513.png)]
    2. 使用util标签完成list集合注入提取
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cHzvshPb-1674046033029)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517104354022.png)]
IOC操作Bean管理(FactoryBean)

Spring有两种类型bean,一种普通bean,一种工厂bean(FactoryBean)

  • 普通bean : 在配置文件中定义bean类型就是返回类型
  • 工厂bean : 在配置文件定义bean类型可以和返回类型不一样
    1. 创建类,让这个类作为工厂bean,实现接口FactoryBean
    2. 实现接口里面得方法,在实现方法中定义返回的bean类型
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F4ybvrfE-1674046033029)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517142046775.png)]
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ctC4HtD9-1674046033029)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517142055522.png)]
IOC操作Bean管理(bean作用域)
  1. 在Spring里面,设置创建bean实例是单实例还是多实例
  2. 在Spring里面,默认情况下,bean是单实例对象(对象地址一样)
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kVvEaLtT-1674046033029)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517143406039.png)]
  3. 如何设置单实例还是多实例
    1. 在spring配置文件bean标签里面有属性(scope)用于设置单实例还是多实例
    2. scope
      • 默认值,singleton,表示是单实例对象
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gUxSGL2G-1674046033029)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517144540453.png)]
      • prototype,表示是多实例对象
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-prg3IFvZ-1674046033030)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517144448175.png)]
    3. singleton和prototype区别
      • singleton单实例, prototype多实例
      • 设置scope值是singleton时候,加载spring配置文件时候就是创建单实例对象
      • 设置scope值是prototype时候,不是加载spring配置文件时候就是创建对象,在调用getBean方法时候创建多实例对象
IOC操作Bean管理(bean生命周期)
  1. 生命周期
    • 从对象创建到对象销毁的过程
  2. bean生命周期
    1. 通过构造器创建bean实例(无参数构造)
    2. 为bean的属性设置值和对其他bean引用(调用set方法)
    3. 调用bean的初始化的方法(需要进行配置)
    4. bean可以使用了(对象获取到了)
    5. 当容器关闭时候调用bean的销毁的方法(需要进行配置销毁方法)
    6. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fVc7yBpo-1674046033030)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517162938312.png)]
IOC操作Bean管理(xml自动装配)
  1. 什么是自动装配
    1. 根据指定装配规则(属性名称或者属性类型) , Spring自动将匹配的属性值进行注入
  2. 过程
    1. 根据属性名称自动注入
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-00L91moI-1674046033030)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517165358083.png)]
    2. 根据属性类型自动注入
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2NGKppXQ-1674046033030)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517165530118.png)]
IOC操作Bean管理(外部属性文件)
  1. 直接配置数据库信息

    1. 配置德鲁伊连接池

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-INzv3Me5-1674046033031)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517184134528.png)]

    2. ​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fTde225u-1674046033031)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517184435500.png)]

  2. 引入外部属性文件配置数据库连接池

    1. 创建外部属性文件,properties格式文件,写数据库信息
      1. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qaSACvlK-1674046033031)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517184634121.png)]
    2. 把外部properties属性文件引入到spring配置文件种
      1. 引入名称空间
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nPNTADO5-1674046033031)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517184756765.png)]
      2. 再spring配置文件使用标签引入外部属性文件
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V8c8gOWx-1674046033032)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517185000758.png)]

IOC操作Bean管理(基于注解方式)

  1. 什么是注解

    1. 注解是代码特殊标记,格式: @注解名称(属性名称=属性值,属性名称=属性值…)
    2. 使用注解,注解作用在类上面,方法上面,属性上面
    3. 使用注解目的:简化xml配置
  2. Spring针对Bean管理种创建对象提供注解
    • 四个都可以用来创建bean实例
    • @Component
    • @Service
    • @Controller
    • @Repository
  3. 基于注解方式实现对象创建
    1. 引入依赖

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0Q9PIjFE-1674046033032)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517190410760.png)]

    2. 开启组件扫描

      1. 引入名称空间

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kLMVFJ9Z-1674046033032)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517190619458.png)]

      2. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iDe7xBaj-1674046033032)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517190813756.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f2pcDtmx-1674046033033)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517191242046.png)]

  4. 开启组件扫面细节
    1. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sF3pMBRF-1674046033033)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517193038391.png)]
    2. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j4QLpUBC-1674046033033)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517193113866.png)]
  5. 基于注解方式实现属性注入
    • @Autowired : 根据书信类型进行自动装配

      1. 把service和dao对象创建,在service和dao类添加创建对象注解
      2. 在servic注入dao对象,在service类添加dao类型属性,在属性上面使用注解

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E0RtnvxS-1674046033033)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517200023521.png)]

    • @Qualifier : 根据属性名称进行注入(和@Autowired一起使用)

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rYLndBS9-1674046033034)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517200416185.png)]

    • @Resource : 根据类型或者名称注入

      1. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b2n3q4a6-1674046033034)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517200751573.png)]
    • @Value : 注入普通类型属性

      1. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ONdZ4tLn-1674046033034)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517200924800.png)]
  6. 完全注解开发

    1. 创建配置类,替代xml文件

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zfnLF1q3-1674046033034)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517201226489.png)]

    2. 编写测试类

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-joW3d3o8-1674046033035)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517201408180.png)]

Aop

Aop(概念)

  1. 什么是aop

    1. 面向切面编程(方面),利用 AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

    2. 通俗描述: 不通过修改源代码方式,在主干功能里面添加新功能

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TEKWCvd2-1674046033035)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517202813251.png)]

AOP(底层原理)

  1. AOP底层使用动态代理

    • 有两种情况动态代理

      1. 有接口情况 , 使用JDK动态代理

        • 创建接口实现类代理对象,增强类的方法

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LzuTsO52-1674046033035)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220518164950692.png)]

      2. 没有接口情况 , 使用CGLIB动态代理

        • 创建子类的代理对象,增强类的方法

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H8i7MjQX-1674046033036)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220518165449235.png)]

AOP(JDK动态代理)

  1. 使用JDK动态代理,使用Proxy类里面的方法创建

    1. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-afzUo7Cw-1674046033036)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220518170022477.png)]

    2. 调用newProxyInstance

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MHrwXtHQ-1674046033036)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220518170107548.png)]

      • 第一个参数,类加载器
      • 第二个参数, 增强方法所在的类, 这个类实现的接口,支持多个接口
      • 第三个参数, 实现这个接口InvocationHandler,创建代理对象,写增强的方法
  2. 编写JDK动态代理代码

    1. 创建接口, 定义方法
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tw0Mhz9I-1674046033036)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220518215221211.png)]
    2. 创建接口实现类,实现方法
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AT7WtxIy-1674046033037)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220518215339237.png)]
    3. 使用Proxy类创建接口代理对象
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sQUK0g8u-1674046033037)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220518220204494.png)]
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UVZ2vwZ6-1674046033037)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220518220402500.png)]

AOP(术语)

  1. 连接点
    • 类里面哪些方法可以被增强, 这些方法称为连接点
  2. 切入点
    • 实际被真正增强的方法, 称为切入点
  3. 通知(或者增强)
    • 实际增强的逻辑部分称为通知
    • 通知有队中类型
      1. 前置通知
      2. 后置通知
      3. 环绕通知(前面后面都做通知)
      4. 异常通知
      5. 最终通知(类似于finally)
  4. 切面(动作)
    • 把通知应用到切入点过程

AOP操作(准备)

  1. Spring框架一班基于AspectJ实现AOP操作
    1. 什么是AspectJ
      • AspectJ不是Spring组成部分,独立AOP框架,与Spring框架一起使用
  2. 基于AspectJ实现AOP操作
    1. 基于xml配置文件实现
    2. 基于注解方式实现(使用)
  3. 在项目工程里面引入AOP相关依赖
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1fTAFsDn-1674046033037)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521082344058.png)]
  4. 切入点表达式(切入点,就是要修改的方法)
    1. 切入点表达式作用: 知道对哪个类里面哪个方法进行增强
    2. 语法结构:
      • execution([权限修饰符] [返回类型] [类全路径] [方法名称] ([参数列表]))
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AcyL3HJ8-1674046033038)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521083001197.png)]
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sEVP9D5p-1674046033038)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521083043392.png)]
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0Kr91vP8-1674046033038)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521083108887.png)]

AOP操作(AspectJ注解)

  1. 创建类,在类里面定义方法

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-79KwsDo0-1674046033038)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521084953048.png)]
  2. 创建增强类(编写增强逻辑)

    1. 在增强类里面, 创建方法 ,让不同方法代表不同通知类型
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nnf7tt6m-1674046033039)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521085222924.png)]
  3. 进行通知配置

    • 配置名称空间
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LfOPGJLP-1674046033039)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521085652446.png)]
    1. spring配置文件种, 开启注解扫描
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uQo5G72z-1674046033039)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521085756853.png)]
    2. 使用注解创建User和UserProxy对象
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zzOfKik1-1674046033039)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521085824165.png)]
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-29h4HNb3-1674046033039)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521085849451.png)]
    3. 在增强类上面添加注解@Aspect
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4qh6x3Y1-1674046033040)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521085930778.png)]
    4. 在spring配置文件中开启生成代理对象
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mk8uqOI2-1674046033040)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521090012512.png)]
  4. 配置不同类型的通知

    1. 在增强类里面,在作为通知方法上面添加通知类型注解,使用切入点表达式配置
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Opqnay1G-1674046033040)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521090328820.png)]
  5. 测试

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hQcwvJSH-1674046033040)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521090531287.png)]
  6. 相同切入点进行抽取(使用直接加方法名称)

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AnGCTjL1-1674046033041)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521091142559.png)]
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5NKtT8qt-1674046033041)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521091202954.png)]
  7. 有多个增强类多同一个方法进行增强,设置增强类优先级

    • 在增强类上面添加注解@Order(数字类型值) ,数字越小优先级越高
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hqp6x7eu-1674046033041)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521091655133.png)]
  8. 完全注解开发

    • 创建配置类,不需要创建xml
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ug7TyRPH-1674046033041)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521092833261.png)]

AOP操作(AspectJ配置文件)

  1. 创建两个类,增强类和被增强类,创建方法
  2. 在Spring配置文件中创建两个对象
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-deZawphf-1674046033042)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521092207329.png)]
  3. 在Spring配置文件中配置切入点
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rsASj6P2-1674046033042)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521092417487.png)]

JdbcTemplate

什么是JdbcTemplate

  1. Speing框架对JDBC进行封装,使用JdbcTemplate方便实现对数据库操作

准备工作

  1. 引入相关jar包
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kNeqPHsF-1674046033042)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521100502865.png)]
  2. 在spring配置文件配置数据库连接池
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pdZIBH4Z-1674046033042)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521100604710.png)]
  3. 配置JdbcTemplate对象,注入DataSource
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4XNgrpcI-1674046033043)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521101015464.png)]
  4. 创建service类,创建dao类,在dao中注入jdbcTemplate对象
    • 配置文件
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5U4QgWlr-1674046033043)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521101533331.png)]
    • Service
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gt2X8o3k-1674046033043)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521101559134.png)]
    • Dao
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yx2HgyKH-1674046033045)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521101639176.png)]

JDBCTemplate操作

JdbcTemplate操作数据库(添加,修改和删除雷同,删除通过id删除)
  1. 对应数据库创建实体类
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A481RXQb-1674046033045)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521102030952.png)]
  2. 编写service和dao
    1. 在到进行数据库添加操作
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vpiFEkUG-1674046033045)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521102247366.png)]
        1. 参数一:sql语句
        2. 参数儿: 可变参数, 设置sql语句值
    2. 在实现类中
    3. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y8kLpcLX-1674046033046)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521102500176.png)]
    4. test类
      1. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A9HkhbGq-1674046033046)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521102842579.png)]
jdbcTemplate操作数据库(查询返回某个值)
  1. 查询表里面有多少条记录,返回是某个值
  2. 使用jdbcTemplate实现查询返回某个值
    1. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UYgRXXTG-1674046033046)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521110113895.png)]
jdbcTemplate操作数据库(查询返回对象)
  1. 场景: 查询图书详情
  2. JdbcTemplate实现查询返回对象
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zroBC8tY-1674046033047)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521111326424.png)]
    • 参数一:sql语句
    • 参数二:RowMapper, 是接口,返回不同类型数据,使用这个接口里面是实现类完成数据封装
    • 参数三:sql语句值
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j1gbzcEo-1674046033047)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521111727384.png)]
jdbcTemplate操作数据库(查询返回集合)
  1. 场景:查询图书列表 分页
  2. 调用jdbcTemplate方法实现查询返回集合
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wNEPbiNR-1674046033047)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521112251330.png)]
    • 参数一:sql语句
    • 参数二:RowMapper, 是接口,返回不同类型数据,使用这个接口里面是实现类完成数据封装
    • 参数三:sql语句值
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rETeuRcb-1674046033047)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521112352218.png)]
jdbcTemplate操作数据库(批量添加操作)
  1. 批量操作: 操作表里面多条记录
  2. jdbcTemplate实现批量添加操作
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WYsfXPk8-1674046033048)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521112850286.png)]
    • 参数一: sql语句
    • 参数二: List集合,添加多条记录数据
  3. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AdIddtpv-1674046033048)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521113417836.png)]
  4. test
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pLgl7WII-1674046033048)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521113722964.png)]
jdbcTemplate操作数据库(批量修改操作)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NiTg9iMk-1674046033049)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521142222397.png)]

jdbcTemplate操作数据库(批量删除操作)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UJvQQuNh-1674046033049)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521142516028.png)]

事务

事务概念

1.什么是事务

  1. 事务时数据库操作最基本单元, 逻辑上一组操作,要么成功,如果有一个失败,所有操作都失败
  2. 典型场景: 银行转账

2.事务四大特性(ACID)

  1. 原子性
  2. 一致性
  3. 隔离性
  4. 持久性

3.事务操作

事务操作(搭建事务操作环境)
  1. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PaqbcqEm-1674046033049)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521143759488.png)]

  2. 创建数据库表,添加记录

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1US1h3Ks-1674046033049)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521144008895.png)]
  3. 创建service, 搭建dao, 完成对象创建和注入关系

    1. servicer注入dao,在dao注入jdbcTemplate,jdbcTemplate注入DataSoure
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p9su9dl7-1674046033050)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521144535625.png)]
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jxQuqRND-1674046033050)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521144518458.png)]
  4. 在dao创建两个方法: 多钱和少钱的方法, 在service创建方法(转账的方法)

    1. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ifca9tr4-1674046033050)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521144912736.png)]
  5. 没有异常可以正常执行,执行过程中有异常,则运行结果会有问题

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bnSADF4d-1674046033050)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521145540679.png)]

    1. 解决问题
      • 使用事务进行解决
    2. 事务操作过程
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cegnhe8E-1674046033051)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521145814521.png)]
事务操作(Spring事务管理介绍)
  1. 事务添加到JavaEE三层结构里面的Service层(业务逻辑层)
  2. 在Spring进行事务管理操作
    1. 两种方式: 编程式事务管理和声明式事务管理(常用)
  3. 声明式事务管理
    1. 基于注解方式(常用)
    2. 基于xml配置文件方式
  4. 在Spring进行声明式事务管理, 底层使用AOP原理
  5. Spring事务管理API
    1. 提供一个接口, 代表事务管理器, 这个接口针对不同的框架提供不同的实现类
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YIZrWu4L-1674046033051)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521151000352.png)]
事务操作(注解声明式事务管理)
  1. 在spring配置文件配置事务管理器
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mSbpWVxC-1674046033051)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521151247837.png)]
  2. 在spring配置文件中开启事务注解
    1. 在spring配置文件张引入名称空间
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HtTupMv3-1674046033051)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521151407630.png)]
    2. 开启事务注解
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jChGVAAR-1674046033052)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521152824396.png)]
    3. 在service类上面(获取service类里面方法上面)添加事务注解
      1. @Transactional,注解可以添加在类上,也可以添加在方法上
      2. 类上添加: 表示这个类中的方法全部添加的事务
      3. 方法添加: 只有该方法添加了事务
事务操作(声明式事务管理参数配置)
  1. 在service类上面添加注解@Transactional,在这个注解里可以配置事务相关参数
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MePKqX05-1674046033052)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521153447700.png)]
  2. propagation: 事务传播行为
    1. 多事务方法直接进行调用, 事务是如何进行管理的
    2. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dsCz3UPl-1674046033052)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521154927983.png)]
    3. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cyqasxkx-1674046033052)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521155008134.png)]
  3. ioslation:事务隔离级别
    1. 事务有特性成为隔离性, 多事务之间不会产生影响,
    2. 有三个读问题 : 脏读,不可重复读, 虚(幻)读
      1. 脏读: 一个未提交事务读取到了另一个未提交事务的数据
      2. 不可重复读: 一个未提交事务读取到另一个提交事务修改的数据
      3. 幻读:一个未提交事务读到另一个提交事务添加数据
    3. 解决: 通过设置事务隔离性,解决问题
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H1nRHW13-1674046033053)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521160115221.png)]
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dKMePUbL-1674046033053)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521160158664.png)]
  4. timeout: 超时时间
    1. 事务需要在一定时间内进行提交, 如果不提交进行回滚
    2. 默认值是-1 , 设置时间以秒单位计算
  5. readOnly: 是否只读
    1. readOnly默认值false,表示可以查询,添加修改删除
  6. rollbackFor: 回滚
    1. 设置出现哪些异常进行事务回滚
  7. noRollbackFor: 不回滚
    1. 设置出现哪些异常不进行事务回滚
事务操作(xml声明式事务管理)
  1. 在spring配置文件中进行配置
    1. 配置事务管理器
    2. 配置通知
      1. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9JxfKYhS-1674046033053)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521170733227.png)]
    3. 配置切入点和切面
      1. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iArMeknF-1674046033053)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521171026970.png)]
事务操作(完全注解声明式事务管理)
  1. 创建配置类, 使用配置类代替xml了配置文件
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vr6Me79k-1674046033054)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521200412454.png)]
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BVajQR89-1674046033054)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521200422123.png)]
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TMasK4Wa-1674046033054)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521200437047.png)]
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-amTWVutw-1674046033054)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521200444589.png)]

Spring5新特性

  1. 整个Spring5框架得代码基于Java8, 运行时兼容JDK9,删除了许多不建议使用得类和方法
  2. Spring5框架自带了通用得日志封装
    1. spring5已经移除Log4jconfigListener, 建议使用Log4j2
    2. spring5框架整合Log4j2
      • 引入jar包
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vw4vGi8y-1674046033055)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521201218463.png)]
      • 创建log4j2.xml
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-prq3etrZ-1674046033055)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521201344549.png)]
  3. Spring5框架可信容器支持@Nullable注解
    1. @NUllable注解可以使用在方法上面,属性上面,参数上面,表示方法返回可以为空,属性值可以为空,参数值可以为空
    2. 注解用在方法上面, 方法返回值可以为空
      1. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ocYZ4a1z-1674046033055)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521202331474.png)]
    3. 注解使用在方法参数
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JxEgAzo7-1674046033055)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521202450990.png)]
    4. 注解使用在属性上,属性可以为空
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lh1FHWD6-1674046033055)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521202551704.png)]
    5. Spring5核心容器支持函数式风GenericApplicationContext
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vBN10Dg4-1674046033056)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521212417666.png)]
  4. Spring5支持整合JUnit5
    1. 整合Junit4
      1. 引入Spring相关针对测试依赖[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WW1rXFUw-1674046033056)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521212909366.png)]
      2. 创建测试类,使用注解方式完成
      3. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nQstDo4t-1674046033056)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521213157576.png)]
    2. Spring5整合Junit5
      1. 引入JUnit5
        1. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hVNDcGvN-1674046033056)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521213349718.png)]
        2. 创建测试类
        3. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mTbWIQqf-1674046033057)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521213504170.png)]

Spring5框架新功能(Webflux)

SpringWebflux介绍

  1. 用于web开发,功能类似于SpringMVC,是一种流行得响应式编程
  2. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qz0XH74y-1674046033057)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521213830838.png)]
  3. 使用传统web框架, 比如SpringMVC,基于Servlet容器, Webflux是一种异步非阻塞得框架,异步非阻塞得框架在Serlvet3.1后支持,核心是基于Reactor得相关API实现得
  4. 异步非阻塞
    • 异步和同步(针对调用者)
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UcF2BZRV-1674046033057)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521214937363.png)]
    • 非阻塞和阻塞(针对被调用者)
      • 阻塞:得到请求等会反馈
      • 非阻塞:得到请求立刻反馈
  5. Webflux特点:
    • 非阻塞式: 在有限资源下,提高系统吞吐量和伸缩性,以Reactor为基础实现响应式编程
    • 函数式编程: Spring框架基于java8, Webflux使用java8函数式编程方式实现路由请求
  6. 比较SpringMVC
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4oBdSRBk-1674046033057)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521215730630.png)]
    • 都可以使用注解方式, 都运行在tomcat邓容器中
    • SpringMVC采用命令式编程, Webflux采用异步响应式编程

响应式

响应式概念

  1. 什么是响应式编程
    • 响应式编程是一种面向数据流和变化传播的编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。
    • 电子表格程序就是响应式编程的一个例子。单元格可以包含字面值或类似"=B1+C1"的公式,而包含公式的单元格的值会依据其他单元格的值的变化而变化。
  2. Java8及其之前版本
    • 提供得观察者模式两个类Observe和Observable
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aDNAKsJx-1674046033058)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521221451254.png)]

响应式编程(Reactor实现)

  1. 响应式编程操作中 , Reactor是满足Reactive规范框架

  2. Reactor有两个核心类, Mono和Flux, 这两个类实现接Publisher,提供了丰富操作符. Flux对象实现发布者,返回N个元素;Mono实现发布者,返回0或者1个元素

  3. Flux和Mono都是数据流得发布者,使用Flux和Mono都可以发出三种数据信号: 元素值 错误信号 完成信号 , 错误信号和完成信号都代表终止信号, 终止信号用于告诉订阅者数据流结束了,错误信号终止数据流得同时把错误信息传递给订阅者

  4. 代码演示Flux和Mono

    1. 引入依赖

      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RoKzpm7H-1674046033058)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220522081959281.png)]
    2. 编写代码

      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zfRzCqpz-1674046033058)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220522082242802.png)]
  5. 三种信号特点

    • 错误信号和完成信号都是终止信号, 不能共存得
    • 如果没有发送任何元素值, 二十直接发送错误或者完成信号,表示是空数据流
    • 如果没有错误信号, 没有完成信号,表示是无限数据流
  6. 调用just或者其他方法只是声明数据流,数据流并没有发出,只是订阅之后才会触发数据流, 不订阅什么都不会发生

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AYPSgW1x-1674046033058)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220522083026467.png)]
  7. 操作符

    对数据流进行一道道操作, 成为操作符,例如:工厂流水线

    1. map元素映射为新元素
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nKAtH9F4-1674046033059)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220522083339161.png)]
    2. flatMap元素映射为流
      • 把每个元素转换流, 把转换之后多个流合并大得流
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1vpF6AOm-1674046033059)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220522083525014.png)]

Webflux执行流程和核心API

  • SpringWebflux基于Reactor,默认使用容器Netty, Netty是高性能得NIO框架,异步非阻塞得框架
    1. Netty
      • BIO
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dU78E9oa-1674046033059)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220522085229321.png)]
      • NIO
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bBOkqHfB-1674046033059)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220522085417410.png)]
    2. SpringWebflux执行过程和SpringMVC相似得
      • SpringWebflux核心控制器DispatchHandle,实现接口WebHandler
      • 接口WebHandler一方法
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mMgq6cxk-1674046033061)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220522085731744.png)]
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CJ8gXh09-1674046033061)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220522085928711.png)]
    3. SpringWebflux里面DispatcherHandler,负责请求处理
      • HandlerMapping: 请求查询到处理方法
      • HandlerAdapter: 真正负责请求处理
      • HandlerResultHandler: 响应结果处理
    4. SpringWebflux实现函数式编程, 两个接口: RouterFunction(路由处理) 和 HandlerFunction(处理函数)

SpringWebflux(基于注解编程模型)

  • 使用注解编程模型方式,和之前SpringMVC使用相似得,只需要把相关依赖配置到项目中,SpringBoot自动配置相关运行容器,默认情况下使用Netty服务器
    1. 创建SpringBoot工程,引入Webflux依赖
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hOGZn9J8-1674046033061)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220522094107487.png)]
    2. 配置启动端口号
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GeN3hKsf-1674046033061)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220522094152212.png)]
    3. 创建包和相关类
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bSkQdkbI-1674046033062)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220522094255896.png)]
      • 创建接口定义了操作方法
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3jOkl4FR-1674046033062)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220522094535765.png)]
    4. 创建实现类
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0VIE8FWt-1674046033062)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220522094828835.png)]
      • 根据id查询
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v84tuDCQ-1674046033062)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220522095013401.png)]
      • 查询多个用户
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OPxF283c-1674046033063)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220522095025210.png)]
      • 添加用户
        • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A7AGeWdF-1674046033063)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220522095100690.png)]
    5. 创建Controller
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eHDjjVaT-1674046033063)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220522095704975.png)]
      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yFz47nZM-1674046033063)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220522095740434.png)]
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Trg4ua1w-1674046033064)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220522100042884.png)]

SpringWebflux(基于函数式编程)

  • 在使用函数式编程模型操作时候,需要自己 初始化服务器
  • 两个核心接口:RouterFunction(路由处理) 和HandlerFunction(处理函数)核心任务定义两个函数式接口得实现并且启动需要得服务器.
  • SpringWebflux请求和响应不再是ServletRequset和ServletResponse, 而是ServerRequset和ServerResponse
    片转存中…(img-GeN3hKsf-1674046033061)]
    3. 创建包和相关类
    • [外链图片转存中…(img-bSkQdkbI-1674046033062)]
    • 创建接口定义了操作方法
      • [外链图片转存中…(img-3jOkl4FR-1674046033062)]
    1. 创建实现类
      • [外链图片转存中…(img-0VIE8FWt-1674046033062)]
      • 根据id查询
        • [外链图片转存中…(img-v84tuDCQ-1674046033062)]
      • 查询多个用户
        • [外链图片转存中…(img-OPxF283c-1674046033063)]
      • 添加用户
        • [外链图片转存中…(img-A7AGeWdF-1674046033063)]
    2. 创建Controller
      • [外链图片转存中…(img-eHDjjVaT-1674046033063)]
      • [外链图片转存中…(img-yFz47nZM-1674046033063)]
  • [外链图片转存中…(img-Trg4ua1w-1674046033064)]

SpringWebflux(基于函数式编程)

  • 在使用函数式编程模型操作时候,需要自己 初始化服务器
  • 两个核心接口:RouterFunction(路由处理) 和HandlerFunction(处理函数)核心任务定义两个函数式接口得实现并且启动需要得服务器.
  • SpringWebflux请求和响应不再是ServletRequset和ServletResponse, 而是ServerRequset和ServerResponse

http://www.ppmy.cn/news/706274.html

相关文章

WIFI-TTL透传模块

简介 WiFi-TTL透传模块基于我司DT-ESPC2-12模块研发&#xff0c;引出串口TTL、EN、STATE 等引脚。产品内置我司最新版本的串口透传固件可完成设备TTL 端口到WiFi/云的数据实时透传。本模块可直接取代原有的有线串口&#xff0c;实现嵌入式设备数据采集和控制。 TTL-WiFi 模块…

怎样用FileZilla连接Windows服务器

许多初学者在第一次使用阿里云或者腾讯云又或者华为云服务器&#xff08;Windows服务器系统&#xff09;的时候不知道怎样利用filezilla进行连接&#xff0c;下面我就来就我自己的成功的经验进行科普一波吧&#xff01; 首先我们需要有一台云服务器下面附阿里云服务器、腾讯云服…

ftp服务器响应码550,ftp服务器 550 success

ftp服务器 550 success 内容精选 换一换 查询job的状态&#xff0c;可用于查询创建备份&#xff0c;删除备份&#xff0c;从备份恢复磁盘等API的执行状态。URI格式GET /v1/{project_id}/jobs/{job_id}GET /v1/{project_id}/jobs/{job_id}参数说明参数是否必选描述project_id是项…

wii游戏wuyou_如何备份,交换和更新Wii游戏的保存内容

wii游戏wuyou Whether you want to backup your game saves because you’ve worked so hard on them or you want to import game saves precisely so you don’t have to work so hard, we’ve got you covered. 您是因为对它们进行了如此努力的工作而想要备份游戏存储,还是…

GO SDK使用说明

简介 欢迎使用腾讯云开发者工具套件&#xff08;SDK&#xff09;3.0&#xff0c;SDK 3.0 是云 API 3.0 平台的配套工具。SDK 3.0 实现了统一化&#xff0c;各个语言版本的 SDK 具备使用方法相同、接口调用方式相同、错误码和返回包格式相同等优点。本文以 GO SDK 3.0 为例&…

转机就在困境时

如前所述,人的转机,企业的转机,都与种种打击,困境结伴而来.彼时彼科,莫趴下,敢尝试.路也许就出来了;本田宗一郎所以能发迹成"摩托车大王",与他不屈不挠,勇于尝试有关系. 1923年9月1日,一场强烈的地震突然袭击了包括东京在内的日本关东地区.当时的宗一郎就在"亚都…

吕梁市人民政府刘晋萍副市长率团访问启迪控股

3月4日&#xff0c;吕梁市副市长刘晋萍一行访问启迪控股总部&#xff0c;与启迪三螺旋董事长彭顷砡、启迪三螺旋董事、启迪控股高级副总裁侯树立进行会谈&#xff0c;并就启迪控股与吕梁市政府在军民融合、数字经济、科技园区、教育及环保等领域的潜在合作方向进行深入交流。 ▲…

店宝宝:京东11.11,30个亚洲一号投用

京东今年的双11大促依然是一场充满温度、关乎热爱的消费狂欢&#xff0c;在活动周期、活动力度及消费体验层面做足功夫。“2020京东11.11全球热爱季"将从10月21日正式开启&#xff0c;截至11月11日为期22天&#xff0c;将为消费者带来超2亿件5折商品、超3亿件新品&#xf…