自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 资源 (4)
  • 收藏
  • 关注

原创 Spring源码解析系列六:Spring的事务结合Mybatis源码详解

@EnableTransactionManagement解析默认代理模式是AdviceMode.PROXY即JDK动态代理之后在BeanDefinition加载的时候,调用ImportSelector的selectImports来导入beanName返回beanName:AutoProxyRegistrar.class.getName(), ProxyTransactionManagementConfiguration.class.getName()在ProxyTransactionManagem

2023-08-19 16:32:24 268

原创 Spring源码解析系列五:Spring的AOP之动态代理源码详解

继续分析invocation.proceed()分析责任链模式来调用增强器Advice,以及最后调用真正的方法。调用ReflectiveMethodInvocation的proceed方法,达到递归调用的效果。以@Around环绕增强来分析dm.interceptor.invoke(this)的逻辑。选出来advisor之后,使用选出的advisor来动态代理增强初始化完毕的Bean。都是使用AopProxy的getProxy方法来获取代理的类。继续分析使用对应的动态代理类来创建类。

2023-08-19 16:31:12 453

原创 Spring源码解析系列四:Spring的AOP源码详解

初次从spring容器中获取第一个bean时,调用InstantiationAwareBeanPostProcessor的postProcessBeforeInstantiation方法时,调用createBean方法—>resolveBeforeInstantiation方法—>调用容器中所有的InstantiationAwareBeanPostProcessor的实现类的postProcessBeforeInstantiation方法。获取方法上的AspectJAnnotation注解信息。

2023-08-19 16:29:16 256

原创 Spring源码解析系列三:Spring的IOC容器的属性注入源码详解

构造参数设置属性:直接调用resolveDependency方法,先根据类型(如果有泛型,则进行泛型类型匹配)从Spring容器中获取匹配的Bean,后根据@Qualifier>@Primary>OrderComparator.getPriority()>属性名称匹配的顺序选出要注入的Bean。不支持循环依赖@Autowire注解标注的属性。

2023-08-19 16:28:15 225

原创 Spring源码解析系列二:Spring的IOC容器实例化Bean的方式源码详解

从源码角度来说XML配置和注解配置实例化Bean的时候是没有区别的,区别的是初始化的时候(注入属性等等)无参构造最简单,不需要实例化入参,直接使用策略模式反射实例化Bean有参构造需要先选出入参,然后根据差异值来确定要使用的构造方法,再使用策略模式反射实例化Bean工厂方式以及静态工厂方式,拿到工厂类中所有的与factoryMethodName相同的且有@Bean标注的方法,获取需要注入的参数,然后根据参数类型差异获取最终要使用的@Bean方法,再使用策略模式反射实例化Bean。

2023-08-19 16:25:01 117

原创 Spring源码解析系列一:Spring的IOC的Bean生命周期源码详解

根据beanName尝试从singletonObjects获取Bean,和解决循环依赖有关非单例作用域的bean,存在循环引用则抛异常根据beanName先从父容器中查找如果要创建的bean含有@DependsOn注解,先加载@DependsOn指定的Bean。

2023-08-19 16:23:33 95

原创 Tomcat源码解析系列五:Tomcat处理Http请求

本文只分析http1.1的请求,tomcat版本:8.4.45初始化Http11Processor解析请求行解析请求头根据contextLength来选择InputFilter, 来解决拆包以及粘包问题,InputFilter来解析请求体填充MappingData: url映射后的数据,表示一个url具体映射到哪个host,哪个context,哪个wrapper上从 MappingData 中获取对应的host、context、wrapper并利用责任链模式依次调用。

2023-05-21 14:05:48 871

原创 Tomcat源码解析系列三:Tomcat的Reactor机制-http请求连接处理机制

Tomcat获取连接的时候使用阻塞获取连接的方式,没有使用reactor模型。防止由于selector.select(selectorTimeout)导致的cpu空转,避免了cpu空转的场景。Tomcat处理长连接超时以及获取read事件的时候使用了reactor模式,非阻塞获取可读的socket,提高请求处理的能力。

2023-05-21 14:04:38 534

原创 Tomcat源码解析系列四:Tomcat的url到Wrapper的映射

当用户发起一个请求时,tomcat是如何将url映射到具体的Wrapper上的呢,就这是本文要阐述的问题。与url到Wrapper映射相关的类位于org.apache.catalina.mapper包下,包含四个类:Mapper:映射关系最核心的、最重要的类。完成url与Host,Context,Wrapper映射关系的初始化、变更、存储及映射。

2023-05-21 14:04:02 206

原创 Tomcat源码解析系列一:Tomcat的整体架构

Acceptor接收到请求封装成一个SocketProcessor扔进线程池Executor后,会调用Processor从操作系统底层读取、过滤字节流,对应用层协议(HTTP/AJP)进行解析封装,生成org.apache.coyote.Request和org.apache.coyote.Response对象。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8bARZsoh-1684648768857)(assets/image-20220719102639459.png)]

2023-05-21 14:03:46 940

原创 Tomcat源码解析系列二:Tomcat类加载机制以及Context的初始化

Bootstrap Loader:加载lib目录下或者System.getProperty(“sun.boot.class.path”)、或者-XBootclasspath所指定的路径或jarExtended Loader:加载lib\ext目录下或者System.getProperty(“java.ext.dirs”) 所指定的 路径或jar。例如:java -Djava.ext.dirs=/projects/testproj/classes HelloWorld。

2023-05-21 14:02:56 855

原创 Tomcat处理请求的编解码

本文只分析tomcat与spring结合chrome浏览器的使用。

2023-05-21 13:55:25 1031

原创 Spring结合Tomcat解决Jsp乱码问题

获取的 StandardWrapper 中的 Servlet 还是 DispatcherServlet 导致死循环,最终导致请求没有办法交给JspServlet 来渲染。所以Spring结合Tomcat也可以玩转jsp,只需要配置DispatcherServlet 的路径映射为/这样就先匹配到 jsp 处理的 servlet:JspServlet来进行视图渲染。如果匹配的DispatcherServlet 的路径映射为/*,那么会导致。分析Tomcat的 url 匹配优先级。

2023-05-21 13:36:58 159

原创 SpringMVC系列七:RequestMappingHandlerAdapter的初始化

在RequestMappingHandlerAdapter初始化时,设置好 参数解析器HandlerMethodArgumentResolver、返回值解析器HandlerMethodReturnValueHandler、类型转换器DefaultFormattingConversionService。

2023-05-21 13:33:49 354

原创 SpringMVC系列六:RequestMappingHandlerMapping的初始化

因为RequestMappingHandlerMapping实现InitializingBean接口所以在spring初始化的时候调用在RequestMappingHandlerMapping的afterPropertiesSet方法,并在其中设置 Method 与 RequestMappingInfo 的映射关系。设置请求 url 与 RequestMappingInfo 的映射关系,设置 RequestMappingInfo 与 HandlerMethod 的映射关系。解析映射关系初始化完成。

2023-05-20 22:09:12 333 1

原创 SpringMVC系列四:SpringMVC的返回值解析-HandlerMethodReturnValueHandler处理流程

之后将ModelAndViewContainer中的 model重新设置到 ModelAndView 中。并在解析页面的时候将 model 中的值设置到 request的attribute中。最终利用request.getAttribute() 来获取 model中的数据。类上或者请求方法上有@ResponseBody方法。如果 Content-Type 为空则设置默认的。处理方法的返回值的ModelAndView的请求。

2023-05-20 22:08:44 381

原创 SpringMVC系列五:SpringMVC的异常处理-HandlerExceptionResolver处理流程

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2nLRsjIF-1684591672319)(assets/image-20221215142013539.png)]HandlerExceptionResoler的实现类在SpringMVC中的顺序。获得匹配的处理异常的标注了@ExceptionHandler的方法。解决spring内部的一些异常,设置错误码以及错误信息。

2023-05-20 22:08:31 917

原创 SpringMVC系列三:SpringMVC的参数解析-HandlerMethodArgumentResolver处理流程

类关系图:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EzHq68LL-1684591466071)(assets/image-20221017204656903.png)]Model参数的参数解析器是:ModelMethodProcessor@RequestBody标注参数的参数解析器是:RequestResponseBodyMethodProcessor@RequestParam标注以及没有注解的简单参数。

2023-05-20 22:06:05 379

原创 SpringMVC系列二:SpringMVC的HandlerMapping

将设置 url 到 ParameterizableViewController 的映射关系保存到 SimpleUrlHandlerMapping 中。将设置 url 到 ResourceHttpRequestHandler 的映射关系保存到 SimpleUrlHandlerMapping 中。最后拿到 viewName 之后进行视图渲染。请求处理的handleRequest方法。请求处理的handleRequest方法。直接将静态资源文件写到 socket 中。请求处理的handleRequest方法。

2023-05-20 22:03:52 316

原创 SpringMVC系列一:SpringMVC请求处理流程

本文只分析动态资源。静态资源、默认页等不分析DispatcherServlet 接收到客户端发送的请求HandleMapping 根据请求 URL 找到对应的 HandlerMethod 以及 HandlerInterceptor,得到 HandlerExecutionChain根据 HandlerMethod 获取 HandlerAdapter顺序调用 HandlerInterceptor 的 preHandle 方法调用@ModelAttribute标注的方法。

2023-05-20 21:56:06 214 1

原创 通用RPC方案

其中ServerChannelInitializer的initChannel为触发read事件时,在SerializeAdapterDecoder的decode方法的最后一个中加入ServerChannelHandler 继承 ChannelInboundHandlerAdapter继续处理read事件时,在ServerChannelHandler 的channelRead方法中使用线程池来处理读到的数据(可能是耗时操作)从而来保证不会由于处理请求导致work线程全部耗尽,而出现等待的情况。

2023-05-20 21:50:31 70

原创 Netty源码解析系列三:Netty与Tomcat的区别

Netty源码解析系列3

2023-05-20 21:48:36 441

原创 Netty源码解析系列二:Netty请求的处理流程

Netty源码解析系列2

2023-05-20 21:44:50 557 1

原创 Netty源码解析系列一:Netty架构

Netty源码分析系列1

2023-05-20 21:40:29 1295

基于stm32f1的611N压力称重传感器加HX711AD模块串口输出质量程序

#include "sys.h" #include "delay.h" #include "usart.h" #include "HX711.h" int main(void) { Init_HX711pin(); delay_init(); //延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 uart_init(9600); //串口初始化为9600 Get_Maopi(); //称毛皮重量 delay_ms(1000); delay_ms(1000); Get_Maopi(); //重新获取毛皮重量 while(1) { Get_Weight(); if(Flag_Error == 0) { printf("净重量 = %d g\r\n",Weight_Shiwu); //打印 delay_ms(1000); } else { printf("负重或者超重\r\n"); delay_ms(1000); } } }

2018-08-25

基于stm32的ADC扫描模式连续转换的DMA传输

STM32的ADC多通道采样,使用DMA传出数据,并且通过串口打印ADC各个通道的采样值

2018-08-25

基于stm32f1的读取博创串口控制电机的协议并转成PWM

基于stm32f1的读取博创串口控制电机的协议,通过读取博创控制卡串口发送的数据转成PWM来控制电机

2018-08-24

基于stm32的SK9822智能外控表面贴装SMD型LED控制协议

这是基于stm32的SK9822智能外控表面贴装SMD型LED控制协议,可以通过调节RGB来控制LED的颜色

2018-08-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除