<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Running666的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Running666</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Running666]]></copyright><item><title><![CDATA[Spring源码解析系列六：Spring的事务结合Mybatis源码详解]]></title><link>https://blog.youkuaiyun.com/Running666/article/details/132381388</link><guid>https://blog.youkuaiyun.com/Running666/article/details/132381388</guid><author>Running666</author><pubDate>Sat, 19 Aug 2023 16:32:24 +0800</pubDate><description><![CDATA[@EnableTransactionManagement解析

默认代理模式是AdviceMode.PROXY即JDK动态代理之后在BeanDefinition加载的时候，调用ImportSelector的selectImports来导入beanName

返回beanName：AutoProxyRegistrar.class.getName(), ProxyTransactionManagementConfiguration.class.getName()
在ProxyTransactionManagem]]></description><category></category></item><item><title><![CDATA[Spring源码解析系列五：Spring的AOP之动态代理源码详解]]></title><link>https://blog.youkuaiyun.com/Running666/article/details/132381365</link><guid>https://blog.youkuaiyun.com/Running666/article/details/132381365</guid><author>Running666</author><pubDate>Sat, 19 Aug 2023 16:31:12 +0800</pubDate><description><![CDATA[继续分析invocation.proceed()分析责任链模式来调用增强器Advice，以及最后调用真正的方法。调用ReflectiveMethodInvocation的proceed方法，达到递归调用的效果。以@Around环绕增强来分析dm.interceptor.invoke(this)的逻辑。选出来advisor之后，使用选出的advisor来动态代理增强初始化完毕的Bean。都是使用AopProxy的getProxy方法来获取代理的类。继续分析使用对应的动态代理类来创建类。]]></description><category></category></item><item><title><![CDATA[Spring源码解析系列四：Spring的AOP源码详解]]></title><link>https://blog.youkuaiyun.com/Running666/article/details/132381347</link><guid>https://blog.youkuaiyun.com/Running666/article/details/132381347</guid><author>Running666</author><pubDate>Sat, 19 Aug 2023 16:29:16 +0800</pubDate><description><![CDATA[初次从spring容器中获取第一个bean时，调用InstantiationAwareBeanPostProcessor的postProcessBeforeInstantiation方法时，调用createBean方法—>resolveBeforeInstantiation方法—>调用容器中所有的InstantiationAwareBeanPostProcessor的实现类的postProcessBeforeInstantiation方法。获取方法上的AspectJAnnotation注解信息。]]></description><category></category></item><item><title><![CDATA[Spring源码解析系列三：Spring的IOC容器的属性注入源码详解]]></title><link>https://blog.youkuaiyun.com/Running666/article/details/132381299</link><guid>https://blog.youkuaiyun.com/Running666/article/details/132381299</guid><author>Running666</author><pubDate>Sat, 19 Aug 2023 16:28:15 +0800</pubDate><description><![CDATA[构造参数设置属性：直接调用resolveDependency方法，先根据类型（如果有泛型，则进行泛型类型匹配）从Spring容器中获取匹配的Bean，后根据@Qualifier>@Primary>OrderComparator.getPriority()>属性名称匹配的顺序选出要注入的Bean。不支持循环依赖@Autowire注解标注的属性。]]></description><category></category></item><item><title><![CDATA[Spring源码解析系列二：Spring的IOC容器实例化Bean的方式源码详解]]></title><link>https://blog.youkuaiyun.com/Running666/article/details/132381285</link><guid>https://blog.youkuaiyun.com/Running666/article/details/132381285</guid><author>Running666</author><pubDate>Sat, 19 Aug 2023 16:25:01 +0800</pubDate><description><![CDATA[从源码角度来说XML配置和注解配置实例化Bean的时候是没有区别的，区别的是初始化的时候（注入属性等等）无参构造最简单，不需要实例化入参，直接使用策略模式反射实例化Bean有参构造需要先选出入参，然后根据差异值来确定要使用的构造方法，再使用策略模式反射实例化Bean工厂方式以及静态工厂方式，拿到工厂类中所有的与factoryMethodName相同的且有@Bean标注的方法，获取需要注入的参数，然后根据参数类型差异获取最终要使用的@Bean方法，再使用策略模式反射实例化Bean。]]></description><category></category></item><item><title><![CDATA[Spring源码解析系列一：Spring的IOC的Bean生命周期源码详解]]></title><link>https://blog.youkuaiyun.com/Running666/article/details/132381132</link><guid>https://blog.youkuaiyun.com/Running666/article/details/132381132</guid><author>Running666</author><pubDate>Sat, 19 Aug 2023 16:23:33 +0800</pubDate><description><![CDATA[根据beanName尝试从singletonObjects获取Bean，和解决循环依赖有关非单例作用域的bean，存在循环引用则抛异常根据beanName先从父容器中查找如果要创建的bean含有@DependsOn注解，先加载@DependsOn指定的Bean。]]></description><category></category></item><item><title><![CDATA[Tomcat源码解析系列五：Tomcat处理Http请求]]></title><link>https://blog.youkuaiyun.com/Running666/article/details/130791348</link><guid>https://blog.youkuaiyun.com/Running666/article/details/130791348</guid><author>Running666</author><pubDate>Sun, 21 May 2023 14:05:48 +0800</pubDate><description><![CDATA[本文只分析http1.1的请求，tomcat版本：8.4.45初始化Http11Processor解析请求行解析请求头根据contextLength来选择InputFilter, 来解决拆包以及粘包问题，InputFilter来解析请求体填充MappingData:  url映射后的数据，表示一个url具体映射到哪个host，哪个context，哪个wrapper上从 MappingData 中获取对应的host、context、wrapper并利用责任链模式依次调用。]]></description><category></category></item><item><title><![CDATA[Tomcat源码解析系列三：Tomcat的Reactor机制-http请求连接处理机制]]></title><link>https://blog.youkuaiyun.com/Running666/article/details/130791334</link><guid>https://blog.youkuaiyun.com/Running666/article/details/130791334</guid><author>Running666</author><pubDate>Sun, 21 May 2023 14:04:38 +0800</pubDate><description><![CDATA[Tomcat获取连接的时候使用阻塞获取连接的方式，没有使用reactor模型。防止由于selector.select(selectorTimeout)导致的cpu空转，避免了cpu空转的场景。Tomcat处理长连接超时以及获取read事件的时候使用了reactor模式，非阻塞获取可读的socket，提高请求处理的能力。]]></description><category></category></item><item><title><![CDATA[Tomcat源码解析系列四：Tomcat的url到Wrapper的映射]]></title><link>https://blog.youkuaiyun.com/Running666/article/details/130791339</link><guid>https://blog.youkuaiyun.com/Running666/article/details/130791339</guid><author>Running666</author><pubDate>Sun, 21 May 2023 14:04:02 +0800</pubDate><description><![CDATA[当用户发起一个请求时，tomcat是如何将url映射到具体的Wrapper上的呢，就这是本文要阐述的问题。与url到Wrapper映射相关的类位于org.apache.catalina.mapper包下，包含四个类：Mapper:映射关系最核心的、最重要的类。完成url与Host，Context，Wrapper映射关系的初始化、变更、存储及映射。]]></description><category></category></item><item><title><![CDATA[Tomcat源码解析系列一：Tomcat的整体架构]]></title><link>https://blog.youkuaiyun.com/Running666/article/details/130791307</link><guid>https://blog.youkuaiyun.com/Running666/article/details/130791307</guid><author>Running666</author><pubDate>Sun, 21 May 2023 14:03:46 +0800</pubDate><description><![CDATA[Acceptor接收到请求封装成一个SocketProcessor扔进线程池Executor后，会调用Processor从操作系统底层读取、过滤字节流，对应用层协议（HTTP/AJP）进行解析封装，生成org.apache.coyote.Request和org.apache.coyote.Response对象。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8bARZsoh-1684648768857)(assets/image-20220719102639459.png)]]]></description><category></category></item><item><title><![CDATA[Tomcat源码解析系列二：Tomcat类加载机制以及Context的初始化]]></title><link>https://blog.youkuaiyun.com/Running666/article/details/130791329</link><guid>https://blog.youkuaiyun.com/Running666/article/details/130791329</guid><author>Running666</author><pubDate>Sun, 21 May 2023 14:02:56 +0800</pubDate><description><![CDATA[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。]]></description><category></category></item><item><title><![CDATA[Tomcat处理请求的编解码]]></title><link>https://blog.youkuaiyun.com/Running666/article/details/130791222</link><guid>https://blog.youkuaiyun.com/Running666/article/details/130791222</guid><author>Running666</author><pubDate>Sun, 21 May 2023 13:55:25 +0800</pubDate><description><![CDATA[本文只分析tomcat与spring结合chrome浏览器的使用。]]></description><category></category></item><item><title><![CDATA[Spring结合Tomcat解决Jsp乱码问题]]></title><link>https://blog.youkuaiyun.com/Running666/article/details/130791107</link><guid>https://blog.youkuaiyun.com/Running666/article/details/130791107</guid><author>Running666</author><pubDate>Sun, 21 May 2023 13:36:58 +0800</pubDate><description><![CDATA[获取的 StandardWrapper 中的 Servlet 还是 DispatcherServlet 导致死循环，最终导致请求没有办法交给JspServlet 来渲染。所以Spring结合Tomcat也可以玩转jsp，只需要配置DispatcherServlet 的路径映射为/这样就先匹配到 jsp 处理的 servlet：JspServlet来进行视图渲染。如果匹配的DispatcherServlet 的路径映射为/*，那么会导致。分析Tomcat的 url 匹配优先级。]]></description><category></category></item><item><title><![CDATA[SpringMVC系列七：RequestMappingHandlerAdapter的初始化]]></title><link>https://blog.youkuaiyun.com/Running666/article/details/130786597</link><guid>https://blog.youkuaiyun.com/Running666/article/details/130786597</guid><author>Running666</author><pubDate>Sun, 21 May 2023 13:33:49 +0800</pubDate><description><![CDATA[在RequestMappingHandlerAdapter初始化时，设置好 参数解析器HandlerMethodArgumentResolver、返回值解析器HandlerMethodReturnValueHandler、类型转换器DefaultFormattingConversionService。]]></description><category></category></item><item><title><![CDATA[SpringMVC系列六：RequestMappingHandlerMapping的初始化]]></title><link>https://blog.youkuaiyun.com/Running666/article/details/130786564</link><guid>https://blog.youkuaiyun.com/Running666/article/details/130786564</guid><author>Running666</author><pubDate>Sat, 20 May 2023 22:09:12 +0800</pubDate><description><![CDATA[因为RequestMappingHandlerMapping实现InitializingBean接口所以在spring初始化的时候调用在RequestMappingHandlerMapping的afterPropertiesSet方法，并在其中设置 Method 与 RequestMappingInfo 的映射关系。设置请求 url 与 RequestMappingInfo 的映射关系，设置 RequestMappingInfo 与 HandlerMethod 的映射关系。解析映射关系初始化完成。]]></description><category></category></item><item><title><![CDATA[SpringMVC系列四：SpringMVC的返回值解析-HandlerMethodReturnValueHandler处理流程]]></title><link>https://blog.youkuaiyun.com/Running666/article/details/130786549</link><guid>https://blog.youkuaiyun.com/Running666/article/details/130786549</guid><author>Running666</author><pubDate>Sat, 20 May 2023 22:08:44 +0800</pubDate><description><![CDATA[之后将ModelAndViewContainer中的 model重新设置到 ModelAndView 中。并在解析页面的时候将 model 中的值设置到 request的attribute中。最终利用request.getAttribute() 来获取 model中的数据。类上或者请求方法上有@ResponseBody方法。如果 Content-Type 为空则设置默认的。处理方法的返回值的ModelAndView的请求。]]></description><category></category></item><item><title><![CDATA[SpringMVC系列五：SpringMVC的异常处理-HandlerExceptionResolver处理流程]]></title><link>https://blog.youkuaiyun.com/Running666/article/details/130786561</link><guid>https://blog.youkuaiyun.com/Running666/article/details/130786561</guid><author>Running666</author><pubDate>Sat, 20 May 2023 22:08:31 +0800</pubDate><description><![CDATA[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2nLRsjIF-1684591672319)(assets/image-20221215142013539.png)]HandlerExceptionResoler的实现类在SpringMVC中的顺序。获得匹配的处理异常的标注了@ExceptionHandler的方法。解决spring内部的一些异常，设置错误码以及错误信息。]]></description><category></category></item><item><title><![CDATA[SpringMVC系列三：SpringMVC的参数解析-HandlerMethodArgumentResolver处理流程]]></title><link>https://blog.youkuaiyun.com/Running666/article/details/130786523</link><guid>https://blog.youkuaiyun.com/Running666/article/details/130786523</guid><author>Running666</author><pubDate>Sat, 20 May 2023 22:06:05 +0800</pubDate><description><![CDATA[类关系图：[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EzHq68LL-1684591466071)(assets/image-20221017204656903.png)]Model参数的参数解析器是：ModelMethodProcessor@RequestBody标注参数的参数解析器是：RequestResponseBodyMethodProcessor@RequestParam标注以及没有注解的简单参数。]]></description><category></category></item><item><title><![CDATA[SpringMVC系列二：SpringMVC的HandlerMapping]]></title><link>https://blog.youkuaiyun.com/Running666/article/details/130786491</link><guid>https://blog.youkuaiyun.com/Running666/article/details/130786491</guid><author>Running666</author><pubDate>Sat, 20 May 2023 22:03:52 +0800</pubDate><description><![CDATA[将设置 url 到 ParameterizableViewController 的映射关系保存到 SimpleUrlHandlerMapping 中。将设置 url 到 ResourceHttpRequestHandler 的映射关系保存到 SimpleUrlHandlerMapping 中。最后拿到 viewName 之后进行视图渲染。请求处理的handleRequest方法。请求处理的handleRequest方法。直接将静态资源文件写到 socket 中。请求处理的handleRequest方法。]]></description><category></category></item><item><title><![CDATA[SpringMVC系列一：SpringMVC请求处理流程]]></title><link>https://blog.youkuaiyun.com/Running666/article/details/130786426</link><guid>https://blog.youkuaiyun.com/Running666/article/details/130786426</guid><author>Running666</author><pubDate>Sat, 20 May 2023 21:56:06 +0800</pubDate><description><![CDATA[本文只分析动态资源。静态资源、默认页等不分析DispatcherServlet 接收到客户端发送的请求HandleMapping 根据请求 URL 找到对应的 HandlerMethod 以及 HandlerInterceptor，得到 HandlerExecutionChain根据 HandlerMethod 获取 HandlerAdapter顺序调用 HandlerInterceptor 的 preHandle 方法调用@ModelAttribute标注的方法。]]></description><category></category></item></channel></rss>