文章目录
一、spring框架概述
-
Spring是轻量级的开源的JavaEE框架。
-
可以解决企业应用开发的复杂性。
-
Spring有两个核心部分:
(1)IOC: 控制反转,把创建对象过程交给Spring进行管理。
(2)AOP: 面向切面编程,不修改源代码进行功能增强。
-
Spring特点:
(1)方便解耦, 简化开发
(2)Aop编程支持
(3)方便程序
(4)方便和其他框架整合
(5)方便进行事务的操作
(6)降低API开发难度
-
spring的最新版本:
网址: https://spring.io/projects/spring-framework#learn
下载地址:https://repo.spring.io/ui/native/release/org/springframework/spring/
1.1 spring的模块:
二、IOC的底层原理
- xml解析、工厂模式、反射。
2.1 IOC(接口)
-
IOC思想基于IOC容器完成,IOC容器底层就是对象工厂
-
Spring提供IOC容器实现两种方式:(两个接口)
(1)BeenFactory:是Spring内部的使用接口,不提供开发人员进行使用
- 加载配置文件时候不会创建对象,在获取对象(使用)才去创建对象。
(2)ApplicationContext:BeanFactory接口的子接口,提供更多更强大的功能,一般由开发人员进行使用。
- 加载配置文件时候就会把在配置文件对象进行创建。
2.2 IOC操作Bean管理
- Bean管理指的是两个操作:
(1)Spring创建对象
(2)Spring注入属性
-
Bean管理操作有两种方式
(1)基于xml配置文件方式实现
(2)基于注解方式实现
2.3 bean的生命周期
- 通过构造器创建bean实例(无参构造)
- 为bean的属性设置值和对其他bean引用(调用set方法)
- 调用bean的初始化的方法(需要进行配置初始化的方法)
- bean可以使用了(对象获取到)
- 当容器关闭时候,调用bean的销毁的方法(需要进行配置销毁的方法)
2.4 基于注解方式实现属性注入
- @Autowired:根据属性类型进行自动装配
- @Qualifier:根据属性名称进行注入: 需要和上面的@Autowired一起使用
- @Resource:可以根据类型注入,可以根据名称注入
- @Value:注入普通类型属性:
@Value(value="abc")
private String name;
三、AOP原理
利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各个部分之间的耦合度降低,提高程序的可用性,同时提高了开发的效率。
3.1 AOP底层使用动态代理
-
有接口情况,使用JDK动态代理
- 创建接口实现类代理对象,增强类的方法
- 创建接口实现类代理对象,增强类的方法
-
没有接口情况,使用CGLIB动态代理
- 创建子类的代理对象,增强类的方法
- 创建子类的代理对象,增强类的方法
3.2 AOP(术语)
-
连接点: 类里面哪些方法可以被增强,这些方法成为连接点
-
切入点: 实际被被真正增强的方法,成为切入点
-
通知(增强)
(1)实际增强的逻辑部分称为通知(增强)
(2)通知有多种类型
- 前置通知
- 后置通知
- 环绕通知
- 异常通知
- 最终通知
-
切面:是动作->把通知应用到切入点过程
3.3 AOP操作(准备)
-
Spring框架一般都是基于AspectJ实现AOP操作
(1)AspectJ:不是Spring的组成部分,独立AOP框架,一般AspectJ和Spring框架一起使用,进行AOP操作
-
基于AspectJ实现AOP操作
(1)基于xml配置文件实现
(2)基于注解方式实现(使用)
-
@Component @Aspect // 生成代理对象
-
四、事务
事务是数据库操作的基本单元,逻辑上一组操作,要么一起成功,要么一起失败。
4.1 事务的特征(ACID)
- 原子性
- 一致性
- 隔离性
- 持久性
4.2 ioslation:事务隔离
- 事务有特性成为隔离性,多事务操作之间不会产生影响,不考虑隔离性产生很多问题
- 有三个读问题:脏读,不可重复读,幻(虚)读
- 脏读:一个未提交事务读取到另一个未提交事务的数据
- 不可重复读:一个未提交事务读取到另一个提交事务修改数据
- 虚读:一个未提交事务读取到另一个提交事务添加数据
- 通过设置事务隔离级别,解决读问题
五、spring5框架的新功能
- 整个spring5框架的代码基于Java8,运行时兼容JDK9,许多不建议使用的类和方法在代码库中删除
- 整合了Junit5的单元测试
WebFlux介绍
用于web开发的响应式开发。Webflux是一种异步非阻塞的框架,核心是基于Reacter的相关API实现的
-
响应式编程
- 响应式编程是一种面向数据流和文化传播的编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。
-
Webflux执行流程和核心API
-
SpringWebflux基于Reactor,默认使用容器是Netty, Netty是高性能的NIO框架,异步非阻塞的框架
-
BIO
-
NIO
-