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