Spring全家桶
2023-12-04 17:47:29 0 举报
AI智能生成
java
作者其他创作
大纲/内容
Spring
4种关键策略
基于POJO的轻量级和最小侵入性编程
通过依赖注入和面向接口实现松耦合
基于切面和惯例进行声明式编程
通过切面和模板减少样板式代码
优点
方便解耦,简化开发
AOP编程的支持
声明式事务的支持
方便程序的测试,对Junit4支持,直接注解就可
方便集成各种优秀的框架
设计模式
单例
工厂
适配器
根据不同商家适配
责任链
源码
Bean
生命周期
扫描类 —— invokeBeanFactoryPostProcessors
封装beanDefinition对象 各种值
放到map
遍历map
验证
能不能实例化 需要实例化么 根据信息来
是否单例等等
判断是不是factory bean
单例池 只是一个ConcurrentHashMap
正在创建的容器
得到class
推断构造方法
根据注入模型
默认
得到构造方法
反射实例化这个对象
后置处理器合并beanDefinition
判断是否允许 循环依赖
提前暴露bean工厂对象
填充属性——自动注入
执行部分aware接口
继续执行部分aware接口 生命周期回调方法
完成代理AOP
beanProstprocessor的前置方法
实例化bean
放到单例池
销毁
作用域
单例(singleton)
多例(prototype)
Request
Session
循环依赖
情况
属性注入可以破解
构造器不行——三级缓存没自己 因二级之后加载B了
三级缓存
去单例池拿
判断是不是正在被创建
判断是否支持循环依赖
二级缓存放到三级缓存
干掉二级缓存——GC
下次再来直接 三级缓存拿 缓存
缓存 存放
一级缓存 单例Bean
二级缓存 工厂 产生Bean —— 产生Bean 复杂
三级缓存 半成品
父子容器
事务实现原理
采用不同的连接器
用AOP 新建立了一个链接——共享链接
ThreadLocal当前事务
前提是 关闭AutoCommit
AOP
静态代理——实现类
动态代理
JDK动态代理 —— 实现接口 —— java反射机制生成一个代理接口的匿名类 —— 调用具体方法的时候调用invokeHander
cligb —— asm字节码编辑技术动态创建类 基于classLoad装载 —— 修改字节码生成子类去处理
IOC
概念
控制反转即IoC (Inversion of Control),它把传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现对象组件的装配和管理。所谓的“控制反转”概念就是对组件对象控制权的转移,从程序代码本身转移到了外部容器。
Spring IOC 负责创建对象,管理对象(通过依赖注入(DI),装配对象,配置对象,并且管理这些对象的整个生命周期。
实现机制
工厂模式
反射机制
类加载机制
过程
加载
生成一个class对象
验证
文件格式验证
元数据验证
字节码验证
符号引用验证
准备
默认值
static会分配内存
解析
解析具体类的信息
引用等
初始化
父类没有初始化 先初始化父类
使用
卸载
加载方式
main()
class.forName
ClassLoader.loadClass
类加载器
Appclass Loader
Extention ClassLoader
Bootstrap ClassLoader
双亲委派原则
可以避免重复加载
安全
SpringMVC
MVC流程
客户端请求提交到DispatcherServlet
由DispatcherServlet控制器查询一个或者多个HandlerMapping,找到处理请求的Controller
将请求提交到Controller
Controller调用业务逻辑处理之后,返回ModeAndView
DispatchServlet查询ModeAndView,将结果显示给客户端
SpringCloud
CAP原理
Consistency(一致性)
Availability(可用性)
Partition tolerance(分区容忍性)
Spring Cloud Netflix组件
Eureka:注册中心
自我保护机制
当Eureka Server 节点在短时间内丢失了过多实例的连接时(比如网络故障或频繁启动关闭客户端)节点会进入自我保护模式,保护注册信息,不再删除注册数据,故障恢复时,自动退出自我保护模式。
Ribbon:负载均衡
Feign:服务调用
Hystrix:熔断器
服务容错核心知识
雪崩效应
服务隔离
熔断降级
服务限流
Hystrix实现延迟和容错
包裹请求
跳闸机制
资源隔离
监控
回退机制
自我修复
两种支持方式
Rest实现服务熔断
Feign实现服务熔断
监控平台
DashBoard
聚合监控Turbine
熔断器隔离策略
线程池隔离策略
信号量隔离策略
Zuul:服务网关
核心功能
路由
过滤器
自定义过滤器只需要继承ZuulFilter
核心源码解析
存在的问题
性能问题
不支持任何长连接,如websocket
替代方案
SpringCloud Gateway
Spring Cloud Alibaba组件
Nacos:注册中心
Sentinel:哨兵 熔断器
Spring Cloud原生及其他组件
Consul:注册中心
Config:分布式配置中心
Gateway:服务网关
路由
过滤器
GatewayFilter:应用到单个路由或者一个分组的路由上
GlobalFilter:应用到所有的路由上
统一鉴权
网关限流
常见限流算法
计数器
漏桶算法
令牌桶算法
基于Filter的限流
SpringCloudGateway提供了基于令牌桶的限流支持
基于其内部的过滤器工程实现
在过滤器工厂中是通过Redis和lua脚本结合方式进行流量控制
基于Sentinel的限流
网关高可用
Sleuth/Zipkin:分布式链路追踪
SpringBoot
约定优于配置,服务于框架的框架,服务的范围是简化配置
自动装配
@SpringBootApplication
这里面包含了@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan,此处@ComponentScan由于没有指定扫描包,因此它默认扫描的是与该类同级的类或者同级包下的所有类,另外@SpringBootConfiguration,通过源码得知它是一个@Configuration
@EnableAutoConfiguration
一旦加上此注解,那么将会开启自动装配功能,简单点讲,Spring会试图在你的classpath下找到所有配置的Bean然后进行装配。当然装配Bean时,会根据若干个(Conditional)定制规则来进行初始化。
0 条评论
下一页