工作机制中分三部来分析springmvc的源代码 ApplicationContext初始化时建立所有url和controller类的对应关系(用Map保存) 根据请求url找到对应的controller,并从controller中找到处理请求的方法 request参数绑定到方法的形参,执行方法处理请求,并返回结果视图 ApplicationContext初始化时建立所有url和controller类的对应关系(用Map保存) Sptingboot中的调用链 RequestMappingHandlerMapping…

2022年6月16日 0条评论 246点热度 0人点赞 王谷雨 阅读全文

返回值解析器 用于对controller的返回值进行二次处理 结构 // 返回值解析器 public interface HandlerMethodReturnValueHandler { // 判断 HandlerMethodReturnValueHandler 是否支持 MethodParameter boolean supportsReturnType(MethodParameter returnType); // 处理给定的返回值 void handleReturnValue(@Nullable Objec…

2022年6月16日 0条评论 224点热度 0人点赞 王谷雨 阅读全文

下图是springmvc的执行流程 图片来源:https://www.jianshu.com/p/8a20c547e245 DispatcherServlet根据url定位到Controller和方法,依赖的是HandlerMapping接口的各个实现类,其中,RequestMappingHandlerMapping是专门用来处理注解方式的Controller的 下面,我们分RequestMappingHandlerMapping的加载以及RequestMappingHandlerMapping如何根据url定位C…

2022年6月16日 0条评论 212点热度 0人点赞 王谷雨 阅读全文

在springmvc中,如何根据url找到controller以及对应方法,依赖的是HandlerMapping接口的getHandler方法 在spring容器中默认注册的HandlerMapping有以下五种: RequestMappingHandlerMapping BeanNameUrlHandlerMapping SimpleUrlHandlerMapping RouterFunctionMapping WelcomePageHandlerMapping 本文主要探索spring和springboot启动…

2022年6月16日 0条评论 295点热度 0人点赞 王谷雨 阅读全文

本文mybatis-spring-boot探讨在springboot工程中mybatis相关对象的注册与加载。 建议先了解mybatis在spring中的使用和springboot自动装载机制,再看此文章。 传送门:Mybatis源码解读-配置加载和Mapper的生成 问题 @MapperScan和@Mapper能一起用吗? 使用 创建工程不再赘述,参考demo 编写Mapper Mapper的注册有两种方式: 在Mapper添加@Mapper注解 在Application类添加@MapperScan注解确定扫描包…

2022年6月16日 0条评论 275点热度 0人点赞 王谷雨 阅读全文

插件允许对Mybatis的四大对象(Executor、ParameterHandler、ResultSetHandler、StatementHandler)进行拦截 问题 Mybatis插件的注册顺序与调用顺序的关系? 使用 在讲源码之前,先看看如何自定义插件。 mybatis-demo,官方文档 创建插件类 自定义插件类需要实现Interceptor // 注解配置需要拦截的类以及方法 @Intercepts({ @Signature(type = StatementHandler.class, method =…

2022年6月16日 0条评论 214点热度 0人点赞 王谷雨 阅读全文

问题 Mybatis四大对象的创建顺序? Mybatis插件的执行顺序? 工程创建 环境:Mybatis(3.5.9) mybatis-demo,参考官方文档 简单示例 这里只放出main方法的示例,其余类请看demo工程。 public static void main(String[] args) throws Exception { // 配置文件路径 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.get…

2022年6月16日 0条评论 242点热度 0人点赞 王谷雨 阅读全文

读写Channel(READ)的创建和注册 在NioEventLoop#run中提到,当有IO事件时,会调用processSelectedKeys方法来处理。 当客户端连接服务端,会触发服务端的ACCEPT事件,创建负责READ事件的channel并注册到workerGroup中 跟踪processSelectedKeys的调用 NioEventLoop#processSelectedKeys() --> NioEventLoop#processSelectedKeysOptimized() --> N…

2022年6月16日 0条评论 231点热度 0人点赞 王谷雨 阅读全文

先看看EventLoop类图 我们在Netty第二篇文章中的代码中,看到有多次用到eventLoop.execute()方法,这个方法就是EventLoop开启线程执行任务的关键,跟踪进去看看 // 类SingleThreadEventExecutor SingleThreadEventExecutor#execute(Runnable task) --> SingleThreadEventExecutor#execute0(@Schedule Runnable task) --> private vo…

2022年6月16日 0条评论 231点热度 1人点赞 王谷雨 阅读全文

简单Echo案例 注释版代码地址:netty 代码是netty的源码,我添加了自己理解的中文注释。 了解了Netty的线程模型和组件之后,我们先看看如何写一个简单的Echo案例,后续的源码讲解都基于此案例。以下是服务端的代码: public final class MyEchoServer { static final int PORT = Integer.parseInt(System.getProperty("port", "8007")); public static …

2022年6月16日 0条评论 180点热度 0人点赞 王谷雨 阅读全文
123456