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方法)
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

Spring5入门笔记相关推荐

  1. vue router 入门笔记

    vue router 入门笔记 tips: components优先级大于component,即当一个route对象里同时配置了component和components时component视为无效 即 ...

  2. 十年公务员转行IT,自学AI三年,他淬炼出746页机器学习入门笔记

    整理 | Jane 编辑 | Just 出品 | AI科技大本营(ID:rgznai100) 近期,梁劲传来该笔记重大更新的消息.<机器学习--从入门到放弃>这本笔记的更新没有停止,在基于 ...

  3. html缩进快捷键_HTML 入门笔记

    HTML 入门笔记 HTML (HyperText Markup Language) 不是一门编程语言,而是一种用来告知浏览器如何组织页面的标记语言. HTML 可复杂.可简单,一切取决于开发者. 它 ...

  4. Python3入门笔记(1) —— windows安装与运行

    Python3入门笔记(1) -- windows安装与运行 Python的设计哲学是"优雅"."明确"."简单".这也是我喜欢Python ...

  5. [Java入门笔记] 面向对象编程基础(二):方法详解

    2019独角兽企业重金招聘Python工程师标准>>> 什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能 ...

  6. React.js入门笔记

    # React.js入门笔记 核心提示 这是本人学习react.js的第一篇入门笔记,估计也会是该系列涵盖内容最多的笔记,主要内容来自英文官方文档的快速上手部分和阮一峰博客教程.当然,还有我自己尝试的 ...

  7. python3入门与进阶笔记_我的Python3萌新入门笔记

    Python3萌新入门笔记是一系列真实的自学笔记. 当然,它也是比较全面的入门教程,共包括54篇笔记. 从第一篇笔记开始,大半年的时间我都是在自学和组织教程内容. 我觉得有必要,把我自己的学习过程和大 ...

  8. MySql入门笔记二~悲催的用户

    这些是当年小弟的MySql学习笔记,木有多么复杂的结构操作,木有多炫丽的语句开发,木有...总之就是木有什么技术含量... 日复一日,彪悍的人生伴随着彪悍的健忘,运维操作为王,好记性不如烂笔头,山水有 ...

  9. 2接口详解_TS入门笔记2——TS接口进阶详解

    TS入门笔记--TS接口进阶详解 一.为什么需要接口? let obj:object; // 定义了一个只能保存对象的变量 // obj = 1; // obj = "123"; ...

最新文章

  1. JavaScript定时器的工作原理(翻译)
  2. pep 8 规范的一些记录
  3. 【C#】【引用加原创】C#实现kalman滤波
  4. JAVA中的内部类(二)成员内部类
  5. 你真明白 Python 装饰器么?
  6. Open Flash Chart 图表组件
  7. Python 调度算法 死锁 静动态链接 分页分段(七)
  8. 最近amd.dll闹的很火
  9. 代码保护软件VMProtect加壳脱壳原理总结
  10. ADODB.Recordset 错误 '800a0e7d' 的解决方法
  11. 【瑞利衰落信道】理论+模型+仿真
  12. 锐捷服务器虚拟化技术_2019云计算分类排行发布 星网锐捷勇夺两项榜首
  13. 用友摩天获“2021最受欢迎企业数智化学习认证社区”殊荣
  14. 作品集十(平面设计)
  15. centos 一键安装php,centos PHP如何实现一键安装
  16. 【深度学习】详解 MAE
  17. 计算机网络------虚拟局域网
  18. muck around
  19. 搭建视频播放服务器(nginx web服务器)
  20. 如何在程序中打开.mp3, .exe, .chm文件? ---介绍一下ShellExecute的用途

热门文章

  1. opencv4算法库学习笔记(5万多字超长干货——纪念奋战的自己)
  2. sqlserver 人名_mssql sqlserver 使用sql脚本生成随机中文名字的方法分享
  3. MES系统五大功能详解
  4. kuangbin 二分
  5. 超详细的Socket通信原理和实例讲解(学习走起~)
  6. 现代控制理论——李雅普诺夫第一方法
  7. 如何通过PHP语言设计出登录验证码(条型码)
  8. JavaWeb项目中添加live2d模型
  9. 字面量、对象字面量、函数字面量、函数定义
  10. Windows11怎么配置Java环境变量