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容器实现两种方式:(两个接口)
- BeanFactory : IOC容器基本实现,是spring内部得使用接口,不提供开发人员使用
- 加载配置文件时候不会创建对象,在获取对象(使用)才会去创建对象
- ApplicationContext : BeanFactory 接口得子接口,提供更多更强大得功能,一般由开发人员使用
- 加载配置文件时候就会创建对象
3.ApplicationContext 接口有实现类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xahSlYI6-1674046033021)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220516204817071.png)]
IOC操作Bean管理
-
什么是Bean管理
-
Bean管理指得是两个操作
-
Spring创建对象
-
Spring注入属性
-
-
-
Bean管理操作有两种方式
- 基于xml配置文件方式实现
- 基于注解方式实现
IOC操作Bean管理(基于xml实现)
- 基于xml方式创建对象
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eKlPYRAp-1674046033022)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220516203136118.png)]
- 在spring配置文件中,使用bean标签,标签里面添加对应属性,就可以实现对象创建
- 在bean标签有很多属性,常用属性
- id属性:唯一标签
- class属性:类全路径(包类路径)
- 创建对象时候,默认也是执行无参数构造方法完成对象创建
- 基于xml方式注入属性
- DI : 依赖注入,就是注入属性
- 使用set方法进行注入
- 创建类 , 定义属性和对应得set方法
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vk70nhOx-1674046033023)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220516221131514.png)]
- 在spring配置文件配置对象创建, 配置属性注入
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WzsO4Juy-1674046033023)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220516221456188.png)]
- 创建类 , 定义属性和对应得set方法
- 使用有参数构造进行注入
- 创建类,定义属性,创建属性对应有参数构造方法
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UdLLriNY-1674046033024)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220516221952353.png)]
- 在spring配置文件中进行配置
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0Hgw3wwG-1674046033024)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220516222221191.png)]
- 创建类,定义属性,创建属性对应有参数构造方法
- 使用set方法进行注入
- p名称空间注入(了解)
- 使用p名称空间注入,可简化基于xml配置方式
- 添加p名字空间在配置文件中
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DhXEyoem-1674046033024)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220516222859944.png)]
- 进行属性注入,在bean标签里面进行操作(也是set方法)
- 添加p名字空间在配置文件中
- 使用p名称空间注入,可简化基于xml配置方式
- DI : 依赖注入,就是注入属性
IOC操作Bean管理(xml注入其他类型属性)
-
字面量
-
null值
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nZ5SjHzG-1674046033025)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220516224725262.png)]
-
属性值包含特殊符号
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H34KD1UM-1674046033025)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220516225124012.png)]
-
-
注入属性-外部bean****
- 创建两个类service类和dao类
- 在service调用到里面得方法
- 在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)]
-
注入属性-内部bean和级联
- 一对多关系 : 部门和员工
- 在实体类中表示一对多关系,员工表示所属得部门,使用对象类型属性表示
- 部门类
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c4B7Hq2l-1674046033026)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517094957519.png)]
- 员工类
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4g1BNG96-1674046033026)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517095119654.png)]
- 在spring配置文件中进行相关配置
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-40UeuB9I-1674046033026)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517095553426.png)]
- 部门类
- 注入属性-级联赋值
- 第一种写法
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sCL0tUkc-1674046033026)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517100455426.png)]
- 第二种写法(生成相应类得get()方法)
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6SuZAIV2-1674046033027)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517100729266.png)]
- 第一种写法
IOC操作Bean管理(xml注入集合属性)
-
注入数组类型属性
-
注入List集合类型属性
-
注入Map集合类型属性
-
创建类,定义数组,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)]
-
-
-
在集合里面设置对象类型值
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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)]
-
把集合注入部分提取出来
- 在spring配置文件中引入名称空间 util
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-coWGItzJ-1674046033028)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517104107513.png)]
- 使用util标签完成list集合注入提取
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cHzvshPb-1674046033029)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517104354022.png)]
- 在spring配置文件中引入名称空间 util
IOC操作Bean管理(FactoryBean)
Spring有两种类型bean,一种普通bean,一种工厂bean(FactoryBean)
- 普通bean : 在配置文件中定义bean类型就是返回类型
- 工厂bean : 在配置文件定义bean类型可以和返回类型不一样
- 创建类,让这个类作为工厂bean,实现接口FactoryBean
- 实现接口里面得方法,在实现方法中定义返回的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作用域)
- 在Spring里面,设置创建bean实例是单实例还是多实例
- 在Spring里面,默认情况下,bean是单实例对象(对象地址一样)
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kVvEaLtT-1674046033029)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517143406039.png)]
- 如何设置单实例还是多实例
- 在spring配置文件bean标签里面有属性(scope)用于设置单实例还是多实例
- 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)]
- 默认值,singleton,表示是单实例对象
- singleton和prototype区别
- singleton单实例, prototype多实例
- 设置scope值是singleton时候,加载spring配置文件时候就是创建单实例对象
- 设置scope值是prototype时候,不是加载spring配置文件时候就是创建对象,在调用getBean方法时候创建多实例对象
IOC操作Bean管理(bean生命周期)
- 生命周期
- 从对象创建到对象销毁的过程
- bean生命周期
- 通过构造器创建bean实例(无参数构造)
- 为bean的属性设置值和对其他bean引用(调用set方法)
- 调用bean的初始化的方法(需要进行配置)
- bean可以使用了(对象获取到了)
- 当容器关闭时候调用bean的销毁的方法(需要进行配置销毁方法)
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fVc7yBpo-1674046033030)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517162938312.png)]
IOC操作Bean管理(xml自动装配)
- 什么是自动装配
- 根据指定装配规则(属性名称或者属性类型) , Spring自动将匹配的属性值进行注入
- 过程
- 根据属性名称自动注入
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-00L91moI-1674046033030)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517165358083.png)]
- 根据属性类型自动注入
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2NGKppXQ-1674046033030)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517165530118.png)]
- 根据属性名称自动注入
IOC操作Bean管理(外部属性文件)
-
直接配置数据库信息
-
配置德鲁伊连接池
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-INzv3Me5-1674046033031)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517184134528.png)]
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fTde225u-1674046033031)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517184435500.png)]
-
-
引入外部属性文件配置数据库连接池
- 创建外部属性文件,properties格式文件,写数据库信息
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qaSACvlK-1674046033031)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517184634121.png)]
- 把外部properties属性文件引入到spring配置文件种
- 引入名称空间
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nPNTADO5-1674046033031)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517184756765.png)]
- 再spring配置文件使用标签引入外部属性文件
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V8c8gOWx-1674046033032)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517185000758.png)]
- 引入名称空间
- 创建外部属性文件,properties格式文件,写数据库信息
IOC操作Bean管理(基于注解方式)
-
什么是注解
- 注解是代码特殊标记,格式: @注解名称(属性名称=属性值,属性名称=属性值…)
- 使用注解,注解作用在类上面,方法上面,属性上面
- 使用注解目的:简化xml配置
-
Spring针对Bean管理种创建对象提供注解
- 四个都可以用来创建bean实例
- @Component
- @Service
- @Controller
- @Repository
-
基于注解方式实现对象创建
-
引入依赖
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0Q9PIjFE-1674046033032)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517190410760.png)]
-
开启组件扫描
-
引入名称空间
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kLMVFJ9Z-1674046033032)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517190619458.png)]
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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)]
-
-
开启组件扫面细节
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sF3pMBRF-1674046033033)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517193038391.png)]
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j4QLpUBC-1674046033033)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517193113866.png)]
-
基于注解方式实现属性注入
-
@Autowired : 根据书信类型进行自动装配
- 把service和dao对象创建,在service和dao类添加创建对象注解
- 在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 : 根据类型或者名称注入
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b2n3q4a6-1674046033034)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517200751573.png)]
-
@Value : 注入普通类型属性
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ONdZ4tLn-1674046033034)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517200924800.png)]
-
-
完全注解开发
-
创建配置类,替代xml文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zfnLF1q3-1674046033034)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517201226489.png)]
-
编写测试类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-joW3d3o8-1674046033035)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517201408180.png)]
-
Aop
Aop(概念)
-
什么是aop
-
面向切面编程(方面),利用 AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
-
通俗描述: 不通过修改源代码方式,在主干功能里面添加新功能
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TEKWCvd2-1674046033035)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220517202813251.png)]
-
AOP(底层原理)
-
AOP底层使用动态代理
-
有两种情况动态代理
-
有接口情况 , 使用JDK动态代理
- 创建接口实现类代理对象,增强类的方法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LzuTsO52-1674046033035)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220518164950692.png)]
-
没有接口情况 , 使用CGLIB动态代理
- 创建子类的代理对象,增强类的方法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H8i7MjQX-1674046033036)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220518165449235.png)]
-
-
AOP(JDK动态代理)
-
使用JDK动态代理,使用Proxy类里面的方法创建
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-afzUo7Cw-1674046033036)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220518170022477.png)]
-
调用newProxyInstance
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MHrwXtHQ-1674046033036)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220518170107548.png)]
- 第一个参数,类加载器
- 第二个参数, 增强方法所在的类, 这个类实现的接口,支持多个接口
- 第三个参数, 实现这个接口InvocationHandler,创建代理对象,写增强的方法
-
-
编写JDK动态代理代码
- 创建接口, 定义方法
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tw0Mhz9I-1674046033036)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220518215221211.png)]
- 创建接口实现类,实现方法
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AT7WtxIy-1674046033037)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220518215339237.png)]
- 使用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(术语)
- 连接点
- 类里面哪些方法可以被增强, 这些方法称为连接点
- 切入点
- 实际被真正增强的方法, 称为切入点
- 通知(或者增强)
- 实际增强的逻辑部分称为通知
- 通知有队中类型
- 前置通知
- 后置通知
- 环绕通知(前面后面都做通知)
- 异常通知
- 最终通知(类似于finally)
- 切面(动作)
- 把通知应用到切入点过程
AOP操作(准备)
- Spring框架一班基于AspectJ实现AOP操作
- 什么是AspectJ
- AspectJ不是Spring组成部分,独立AOP框架,与Spring框架一起使用
- 什么是AspectJ
- 基于AspectJ实现AOP操作
- 基于xml配置文件实现
- 基于注解方式实现(使用)
- 在项目工程里面引入AOP相关依赖
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1fTAFsDn-1674046033037)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521082344058.png)]
- 切入点表达式(切入点,就是要修改的方法)
- 切入点表达式作用: 知道对哪个类里面哪个方法进行增强
- 语法结构:
- 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注解)
-
创建类,在类里面定义方法
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-79KwsDo0-1674046033038)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521084953048.png)]
-
创建增强类(编写增强逻辑)
- 在增强类里面, 创建方法 ,让不同方法代表不同通知类型
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nnf7tt6m-1674046033039)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521085222924.png)]
- 在增强类里面, 创建方法 ,让不同方法代表不同通知类型
-
进行通知配置
- 配置名称空间
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LfOPGJLP-1674046033039)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521085652446.png)]
- spring配置文件种, 开启注解扫描
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uQo5G72z-1674046033039)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521085756853.png)]
- 使用注解创建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)]
- 在增强类上面添加注解@Aspect
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4qh6x3Y1-1674046033040)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521085930778.png)]
- 在spring配置文件中开启生成代理对象
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mk8uqOI2-1674046033040)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521090012512.png)]
-
配置不同类型的通知
- 在增强类里面,在作为通知方法上面添加通知类型注解,使用切入点表达式配置
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Opqnay1G-1674046033040)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521090328820.png)]
- 在增强类里面,在作为通知方法上面添加通知类型注解,使用切入点表达式配置
-
测试
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hQcwvJSH-1674046033040)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521090531287.png)]
-
相同切入点进行抽取(使用直接加方法名称)
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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)]
-
有多个增强类多同一个方法进行增强,设置增强类优先级
- 在增强类上面添加注解@Order(数字类型值) ,数字越小优先级越高
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hqp6x7eu-1674046033041)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521091655133.png)]
-
完全注解开发
- 创建配置类,不需要创建xml
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ug7TyRPH-1674046033041)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521092833261.png)]
AOP操作(AspectJ配置文件)
- 创建两个类,增强类和被增强类,创建方法
- 在Spring配置文件中创建两个对象
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-deZawphf-1674046033042)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521092207329.png)]
- 在Spring配置文件中配置切入点
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rsASj6P2-1674046033042)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521092417487.png)]
JdbcTemplate
什么是JdbcTemplate
- Speing框架对JDBC进行封装,使用JdbcTemplate方便实现对数据库操作
准备工作
- 引入相关jar包
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kNeqPHsF-1674046033042)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521100502865.png)]
- 在spring配置文件配置数据库连接池
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pdZIBH4Z-1674046033042)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521100604710.png)]
- 配置JdbcTemplate对象,注入DataSource
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4XNgrpcI-1674046033043)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521101015464.png)]
- 创建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删除)
- 对应数据库创建实体类
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A481RXQb-1674046033045)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521102030952.png)]
- 编写service和dao
- 在到进行数据库添加操作
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vpiFEkUG-1674046033045)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521102247366.png)]
- 参数一:sql语句
- 参数儿: 可变参数, 设置sql语句值
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vpiFEkUG-1674046033045)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521102247366.png)]
- 在实现类中
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y8kLpcLX-1674046033046)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521102500176.png)]
- test类
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A9HkhbGq-1674046033046)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521102842579.png)]
- 在到进行数据库添加操作
jdbcTemplate操作数据库(查询返回某个值)
- 查询表里面有多少条记录,返回是某个值
- 使用jdbcTemplate实现查询返回某个值
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UYgRXXTG-1674046033046)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521110113895.png)]
jdbcTemplate操作数据库(查询返回对象)
- 场景: 查询图书详情
- 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操作数据库(查询返回集合)
- 场景:查询图书列表 分页
- 调用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操作数据库(批量添加操作)
- 批量操作: 操作表里面多条记录
- jdbcTemplate实现批量添加操作
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WYsfXPk8-1674046033048)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521112850286.png)]
- 参数一: sql语句
- 参数二: List集合,添加多条记录数据
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AdIddtpv-1674046033048)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521113417836.png)]
- 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.什么是事务
- 事务时数据库操作最基本单元, 逻辑上一组操作,要么成功,如果有一个失败,所有操作都失败
- 典型场景: 银行转账
2.事务四大特性(ACID)
- 原子性
- 一致性
- 隔离性
- 持久性
3.事务操作
事务操作(搭建事务操作环境)
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PaqbcqEm-1674046033049)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521143759488.png)]
-
创建数据库表,添加记录
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1US1h3Ks-1674046033049)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521144008895.png)]
-
创建service, 搭建dao, 完成对象创建和注入关系
- 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)]
- servicer注入dao,在dao注入jdbcTemplate,jdbcTemplate注入DataSoure
-
在dao创建两个方法: 多钱和少钱的方法, 在service创建方法(转账的方法)
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ifca9tr4-1674046033050)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521144912736.png)]
-
没有异常可以正常执行,执行过程中有异常,则运行结果会有问题
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bnSADF4d-1674046033050)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521145540679.png)]
- 解决问题
- 使用事务进行解决
- 事务操作过程
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cegnhe8E-1674046033051)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521145814521.png)]
- 解决问题
事务操作(Spring事务管理介绍)
- 事务添加到JavaEE三层结构里面的Service层(业务逻辑层)
- 在Spring进行事务管理操作
- 两种方式: 编程式事务管理和声明式事务管理(常用)
- 声明式事务管理
- 基于注解方式(常用)
- 基于xml配置文件方式
- 在Spring进行声明式事务管理, 底层使用AOP原理
- Spring事务管理API
- 提供一个接口, 代表事务管理器, 这个接口针对不同的框架提供不同的实现类
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YIZrWu4L-1674046033051)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521151000352.png)]
- 提供一个接口, 代表事务管理器, 这个接口针对不同的框架提供不同的实现类
事务操作(注解声明式事务管理)
- 在spring配置文件配置事务管理器
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mSbpWVxC-1674046033051)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521151247837.png)]
- 在spring配置文件中开启事务注解
- 在spring配置文件张引入名称空间
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HtTupMv3-1674046033051)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521151407630.png)]
- 开启事务注解
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jChGVAAR-1674046033052)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521152824396.png)]
- 在service类上面(获取service类里面方法上面)添加事务注解
- @Transactional,注解可以添加在类上,也可以添加在方法上
- 类上添加: 表示这个类中的方法全部添加的事务
- 方法添加: 只有该方法添加了事务
- 在spring配置文件张引入名称空间
事务操作(声明式事务管理参数配置)
- 在service类上面添加注解@Transactional,在这个注解里可以配置事务相关参数
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MePKqX05-1674046033052)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521153447700.png)]
- propagation: 事务传播行为
- 多事务方法直接进行调用, 事务是如何进行管理的
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dsCz3UPl-1674046033052)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521154927983.png)]
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cyqasxkx-1674046033052)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521155008134.png)]
- ioslation:事务隔离级别
- 事务有特性成为隔离性, 多事务之间不会产生影响,
- 有三个读问题 : 脏读,不可重复读, 虚(幻)读
- 脏读: 一个未提交事务读取到了另一个未提交事务的数据
- 不可重复读: 一个未提交事务读取到另一个提交事务修改的数据
- 幻读:一个未提交事务读到另一个提交事务添加数据
- 解决: 通过设置事务隔离性,解决问题
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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)]
- timeout: 超时时间
- 事务需要在一定时间内进行提交, 如果不提交进行回滚
- 默认值是-1 , 设置时间以秒单位计算
- readOnly: 是否只读
- readOnly默认值false,表示可以查询,添加修改删除
- rollbackFor: 回滚
- 设置出现哪些异常进行事务回滚
- noRollbackFor: 不回滚
- 设置出现哪些异常不进行事务回滚
事务操作(xml声明式事务管理)
- 在spring配置文件中进行配置
- 配置事务管理器
- 配置通知
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9JxfKYhS-1674046033053)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521170733227.png)]
- 配置切入点和切面
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iArMeknF-1674046033053)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521171026970.png)]
事务操作(完全注解声明式事务管理)
-
创建配置类, 使用配置类代替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新特性
- 整个Spring5框架得代码基于Java8, 运行时兼容JDK9,删除了许多不建议使用得类和方法
- Spring5框架自带了通用得日志封装
- spring5已经移除Log4jconfigListener, 建议使用Log4j2
- 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)]
- Spring5框架可信容器支持@Nullable注解
- @NUllable注解可以使用在方法上面,属性上面,参数上面,表示方法返回可以为空,属性值可以为空,参数值可以为空
- 注解用在方法上面, 方法返回值可以为空
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ocYZ4a1z-1674046033055)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521202331474.png)]
- 注解使用在方法参数
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JxEgAzo7-1674046033055)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521202450990.png)]
- 注解使用在属性上,属性可以为空
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lh1FHWD6-1674046033055)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521202551704.png)]
- Spring5核心容器支持函数式风GenericApplicationContext
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vBN10Dg4-1674046033056)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521212417666.png)]
- Spring5支持整合JUnit5
- 整合Junit4
- 引入Spring相关针对测试依赖[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WW1rXFUw-1674046033056)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521212909366.png)]
- 创建测试类,使用注解方式完成
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nQstDo4t-1674046033056)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521213157576.png)]
- Spring5整合Junit5
- 引入JUnit5
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hVNDcGvN-1674046033056)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521213349718.png)]
- 创建测试类
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mTbWIQqf-1674046033057)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521213504170.png)]
- 引入JUnit5
- 整合Junit4
Spring5框架新功能(Webflux)
SpringWebflux介绍
- 用于web开发,功能类似于SpringMVC,是一种流行得响应式编程
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qz0XH74y-1674046033057)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521213830838.png)]
- 使用传统web框架, 比如SpringMVC,基于Servlet容器, Webflux是一种异步非阻塞得框架,异步非阻塞得框架在Serlvet3.1后支持,核心是基于Reactor得相关API实现得
- 异步非阻塞
- 异步和同步(针对调用者)
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UcF2BZRV-1674046033057)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521214937363.png)]
- 非阻塞和阻塞(针对被调用者)
- 阻塞:得到请求等会反馈
- 非阻塞:得到请求立刻反馈
- 异步和同步(针对调用者)
- Webflux特点:
- 非阻塞式: 在有限资源下,提高系统吞吐量和伸缩性,以Reactor为基础实现响应式编程
- 函数式编程: Spring框架基于java8, Webflux使用java8函数式编程方式实现路由请求
- 比较SpringMVC
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4oBdSRBk-1674046033057)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521215730630.png)]
- 都可以使用注解方式, 都运行在tomcat邓容器中
- SpringMVC采用命令式编程, Webflux采用异步响应式编程
响应式
响应式概念
- 什么是响应式编程
- 响应式编程是一种面向数据流和变化传播的编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。
- 电子表格程序就是响应式编程的一个例子。单元格可以包含字面值或类似"=B1+C1"的公式,而包含公式的单元格的值会依据其他单元格的值的变化而变化。
- Java8及其之前版本
- 提供得观察者模式两个类Observe和Observable
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aDNAKsJx-1674046033058)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220521221451254.png)]
响应式编程(Reactor实现)
-
响应式编程操作中 , Reactor是满足Reactive规范框架
-
Reactor有两个核心类, Mono和Flux, 这两个类实现接Publisher,提供了丰富操作符. Flux对象实现发布者,返回N个元素;Mono实现发布者,返回0或者1个元素
-
Flux和Mono都是数据流得发布者,使用Flux和Mono都可以发出三种数据信号: 元素值 错误信号 完成信号 , 错误信号和完成信号都代表终止信号, 终止信号用于告诉订阅者数据流结束了,错误信号终止数据流得同时把错误信息传递给订阅者
-
代码演示Flux和Mono
-
引入依赖
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RoKzpm7H-1674046033058)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220522081959281.png)]
-
编写代码
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zfRzCqpz-1674046033058)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220522082242802.png)]
-
-
三种信号特点
- 错误信号和完成信号都是终止信号, 不能共存得
- 如果没有发送任何元素值, 二十直接发送错误或者完成信号,表示是空数据流
- 如果没有错误信号, 没有完成信号,表示是无限数据流
-
调用just或者其他方法只是声明数据流,数据流并没有发出,只是订阅之后才会触发数据流, 不订阅什么都不会发生
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AYPSgW1x-1674046033058)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220522083026467.png)]
-
操作符
对数据流进行一道道操作, 成为操作符,例如:工厂流水线
- map元素映射为新元素
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nKAtH9F4-1674046033059)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220522083339161.png)]
- flatMap元素映射为流
- 把每个元素转换流, 把转换之后多个流合并大得流
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1vpF6AOm-1674046033059)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220522083525014.png)]
- map元素映射为新元素
Webflux执行流程和核心API
- SpringWebflux基于Reactor,默认使用容器Netty, Netty是高性能得NIO框架,异步非阻塞得框架
- 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)]
- BIO
- 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)]
- SpringWebflux里面DispatcherHandler,负责请求处理
- HandlerMapping: 请求查询到处理方法
- HandlerAdapter: 真正负责请求处理
- HandlerResultHandler: 响应结果处理
- SpringWebflux实现函数式编程, 两个接口: RouterFunction(路由处理) 和 HandlerFunction(处理函数)
- Netty
SpringWebflux(基于注解编程模型)
- 使用注解编程模型方式,和之前SpringMVC使用相似得,只需要把相关依赖配置到项目中,SpringBoot自动配置相关运行容器,默认情况下使用Netty服务器
- 创建SpringBoot工程,引入Webflux依赖
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hOGZn9J8-1674046033061)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220522094107487.png)]
- 配置启动端口号
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GeN3hKsf-1674046033061)(C:\Users\86187\AppData\Roaming\Typora\typora-user-images\image-20220522094152212.png)]
- 创建包和相关类
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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)]
- 创建实现类
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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)]
- 创建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)]
- 创建SpringBoot工程,引入Webflux依赖
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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)]
- 创建实现类
- [外链图片转存中…(img-0VIE8FWt-1674046033062)]
- 根据id查询
- [外链图片转存中…(img-v84tuDCQ-1674046033062)]
- 查询多个用户
- [外链图片转存中…(img-OPxF283c-1674046033063)]
- 添加用户
- [外链图片转存中…(img-A7AGeWdF-1674046033063)]
- 创建Controller
- [外链图片转存中…(img-eHDjjVaT-1674046033063)]
- [外链图片转存中…(img-yFz47nZM-1674046033063)]
- [外链图片转存中…(img-Trg4ua1w-1674046033064)]
SpringWebflux(基于函数式编程)
- 在使用函数式编程模型操作时候,需要自己 初始化服务器
- 两个核心接口:RouterFunction(路由处理) 和HandlerFunction(处理函数)核心任务定义两个函数式接口得实现并且启动需要得服务器.
- SpringWebflux请求和响应不再是ServletRequset和ServletResponse, 而是ServerRequset和ServerResponse
- …