- 博客(19)
- 资源 (1)
- 收藏
- 关注
原创 微服务组件源码6——Spring Gateway
* Spring WebFlux的定位和SpringMVC一样,不过区别在其处理方法可以使用Flux进行编写,且返回一个发布者Flux/Mono* Spring WebFlux也可以适配@RequestMapping那一套的编写模式,只不过建议基于Flux来编写controller方法 WebFlux是兼容Spring MVC 基于@Controller,@RequestMapping等注解的编程开发方式的,可以做到平滑切换* WebFluxAutoConfiguration 自动装配时先自动装配Enab
2026-06-09 19:53:02
268
原创 微服务组件源码5——Setinel核心流程详解
Node负责指标统计,包含每秒/每分钟QPS、Thread、RT等指标。public interface Node extends OccupySupport, DebugSupport { //每分钟请求数,pass + block long totalRequest(); //每分钟通过的请求数 long totalPass(); //每分钟完成的请求数,即调用了Entry#exit() long totalSuccess(); //每分钟阻塞的
2026-06-07 13:44:23
447
原创 微服务组件源码4——Setinel源码整体流程
* SphU.entry方法主流程图* Context、Entry、Node关系图* 整体流程Entry entry = null;// 务必保证 finally 会被执行try { // 1、进行Sentinel拦截// 资源名可使用任意有业务语义的字符串,注意数目不能太多(超过 1K),超出几千请作为参数传入而不要直接作为资源名 // EntryType 代表流量类型(inbound/outbound),其中系统规则只对 IN 类型的埋点生效// entry方法内会封装了资源的名称S
2026-06-05 16:37:15
581
原创 微服务组件源码3——OpenFeign的原理
* 代码架构 - 顶级接口Client表示一个通信客户端,只有一个execute方法,其实现类有多种,有提供最基本通信功能的ApacheClient、OKhttpClient、- 还有其他装饰过的实现类,如提供负载均衡的通信客户端LoadBlancerFeignClient,对基本Client进行再次封装,负载功能由FeignLoadBlancer提供 其核心的选择服务实例的还能就是由ILoadBalancer总控组件提供,这一点和Spring Ribbon是一样的* OpenFeign只是对 HTTP
2026-06-03 22:50:45
478
原创 微服务组件源码2——Spring Ribbon原理(基于RibbonLoadBalancerClient)
Ribbon 负载组件的内部就是集成了 LoadBalancerClient 负载均衡客户端,所以 Ribbon 负载均衡的原理本质也跟上面介绍的 LoadBalancerClient 原理一致,负载均衡器 Ribbon 默认会通过 Eureka Client 向 Eureka 服务端的服务注册列表中获取服务的信息,并缓存一份在本地 JVM 中,根据缓存的服务注册列表信息,可以通过 LoadBalancerClient 来选择不同的服务实例,从而实现负载均衡。主要做如下的增强处理:基本用法就是注入一个 Re
2026-06-02 19:45:31
652
原创 微服务组件源码1——服务调用概述
Feign 集成 RestTemplate、Ribbon 实现了客户端的负载均衡的 Http 调用,并对原调用方式进行了封装,使得开发者不必手动使用 RestTemplate 调用服务,而是声明一个接口,并在这个接口中标注一个注解即可完成服务调用,这样更加符合面向接口编程的宗旨,客户端在调用服务端时也不需要再关注请求的方式、地址以及restTemplate是 forObject 还是 forEntity,结构更加明了,耦合也更低,简化了开发。选择一个并发量最小的服务节点 server。
2026-05-31 17:02:52
677
原创 SpringBoot源码笔记2——自动配置原理
是SPI的一种实现方法,服务调用方法只需提供接口名称,而服务提供方需要在类路径的META-INF/spring.factories位置配置接口的实现类,服务调用后在根据类名进行反射实例化即可。* @ComponentScan:由于没有显示指定basePackage的值,所以默认的扫描路径为添加的@SpringBootApplication注解的类的路径。说要所有自动配置类,即spring.factories下指定的自动配置类,会在这一步才开始导入,它的优先顺序最低(执行时机相对是最晚的);
2026-05-30 16:10:51
328
原创 SpringMVC源码笔记4——处理结果processDispatchResult(包括异常处理)
在doDispatch的整个流程中,使用一个大的try-catch保住,如果存在异常或捕捉到传递到此processDispatchResult的参数中,传递进来异常参数的不为空Exception exception,需要获取exception对应的ModelAndView 结果,基于此进行不同的分支处理
2026-05-26 18:51:04
741
原创 SpringMVC源码笔记3——HandlerAdapter的获取和执行
处理处理:类似ModelAndViewMethodReturnValueHandler,只拷贝了属性值mavContainer.addAllAttributes(((Model) returnValue).asMap());- 处理处理:WebAsyncUtils.getAsyncManager(webRequest).startCallableProcessing(webAsyncTask, mavContainer);
2026-05-24 11:08:42
822
原创 SpringMVC源码笔记2——执行getHandler获取HandlerExecutionChain
* 遍历List<HandlerMapping> handlerMappings,调用每一个HandlerMapping的getHandler(request)以获取请求对应的HandlerExecutionChain对象* 返回第一个匹配HandlerMapping的getHandler(request)的结果HandlerExecutionChain mappedHandler = this.getHandler(processedRequest);protected HandlerExecutionC
2026-05-23 13:09:19
542
原创 SpringMVC源码笔记1——整体流程和DispatcherServlet
由于DiapatcherSeervlet组件在初始化的时候,优先从容器中获取组件,这就可以借助IOC的特性,对组件进行解耦的配置,通过先用户暴露出组件的对象,用户可以对这个组件对象进行 自定义配置,所以一般我们会调用这个对象的一些扩展性的方法就行配置,比如add自定义的解析器等,这个修改不会影响此组件在后续的使用。可以自定义一些Handler,Interceptor,ViewResolver,MessageConverter。SpringBoot 2.0 后,该类被标记为@Deprecated(弃用)。
2026-05-20 20:45:41
695
原创 Spring源码笔记7——AOP
* Advised顶级接口 切面只是一个描述的增强类,需要通过创建代理类进行对目标对象的增强,它封装了Advisor和代理相关配置,* 切面Advisor = 切点 + 通知;作用是一个增强类,包含一个 Advice 通知,PointcutAdvisor 包含一个 Advice 通知和一个 Pointcut* ProxyFactory类 ①实现了 Advised接口,封装了AOP功能实现所需的所有组件,包括原代理创建工厂ProxyCreatorSupport、AdvisedSupport、AOP配置
2026-05-17 16:04:22
841
原创 Spring源码笔记6——Bean的生命周期
本文是对 Spring Bean 实例化(Instantiation)方式的总结。常见的实例 bean 的方式有五种,都有 XML、Java 注解和 Java API 三种配置方式。所谓 Java API 指的是通过最底层的 BeanDenifition 的方式注册,无论是 xml 还是 java 注解,最终被解析成 BeanDefinition。 (1)常规方式,需要一些配套的解析类处理成BeanDefinition后注册到容器中 * 通过无参构造器(配置元信息:XML、Java 注解和
2026-05-15 19:53:22
714
原创 Spring源码笔记5—AnotationConfigServletWebServerApplicationContext(SpringBoot默认容器)
1、继承AbstractApplicationContext,几乎可以把GenericApplicationContext等价于DefaultListableBeanFactory + 上下文刷新等其他功能 ①该实现内部有一个 DefaultListableBeanFactory 实例,GenericApplicationContext基本就是对DefaultListableBeanFactory 做了个简易的封装,几乎所有方法都是使用了DefaultListableBeanFactory的方法去实现。
2026-05-12 20:11:33
797
原创 Spring源码笔记4——ApplicationContext和AbstractApplicationContext
①在resources目录下创建四个文件messages.propertes、messages_en.properties、messages_ja.properties、messages_zh.properties,然后分别在四个文件里面定义同名的key,比如在message_en.properties中定义hi=hello,在messages_zh中定义hi=你好,默认存储的是环境变量中spring.profiles.active和spring.profiles.default中指定值;
2026-05-10 15:41:36
672
原创 Spring源码笔记3——DefaultListableBeanFactory
* 实现了ListableBeanFactory、ConfigurableBeanFactory、BeanDefinitionRegistry3个主要的接口,是一个可用的,默认的BeanFactory* 实现了beanDefinition相关功能,维护一张beanDefinitionMap表以存储bean定义元数据对象,支持默认或自定义的beanDefinition解析器* 重点是实现了继承自AbstractAutowireCapableBeanFactory的resolveDependency方法以实现类
2026-05-07 23:03:54
516
原创 Spring源码笔记2——AbstractAutowireCapableBeanFactory
* 作为 AutowireCapableBeanFactory接口的实现类,AbstractAutowireCapableBeanFactory 提供了各阶段生命周期的细粒度的分步骤实现,方法如下①实例化autowireConstructor②封装为BeanWrapper实现属性访问和类型转换③属性注入populateBean、及属性赋值applyPropertyValues④初始化initializeBean⑤各种后置处理器的调用等* 作为 AbstractBeanFactory 的子类,Abstract
2026-05-05 13:31:27
496
原创 Spring源码笔记1——BeanFactory
通过暴露此功能,Spring框架之外的程序,也能具有自动装配的能力(此接口赋予它的)。- 例如一个外部对象A,这个A对象不在本容器中管理,但是A里面添加了注入注解的成员属性@Autowrite B,是可以使用本容器的对象进行注入的。* 自动装配的主对象可以不在Spring的IOC容器里,但是需要被依赖注入的成员,就必须是Spring容器管辖的Bean。,这些被装配的属性对象都是Spring管理的,所以这个接口提供功能就是自动装配bean相关的。的此方法不能清楚地表明是独立的实例。
2026-05-03 15:06:09
533
jstl.jar + standard.jar
2017-12-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅