前面在MyBatis中动态SQL执行过程一文中介绍了MyBatis在运行时大体的运行过程。其中有介绍到通过MappedStatement来获取SQL语句,不过没有展开分析。本文就接着来剖析一下,一段带有动态XML标签的文本是如何被MyBatis解析成SQL字符串的。
在MyBatis中Mapper对象的创建过程一文中,在创建mapper的动态代理对象时指定的InvocationHandler是MapperFactory类型的。那么所有mapper接口中的方法都会经过MapperFactory类的invoke方法,该方法就是分析Mapper方法也就是整个MyBatis运行时的入口。
在Spring Boot的应用中,一般都是直接使用SpringApplication的静态方法run来运行,当然也可以先创建SpringApplication实例并设置一些属性,然后调用其对象方法run来运行。实际上在静态的run方法中也是通过创建一个SpringApplication实例然后调用实例方法run。所以两种方法本质上没有区别。 本文分析Spring Boot的构造原理,也就是创建SpringApplication实例的过程。
在Nacos升级到2.x之后,用gRPC替代了之前版本中的http,服务注册和配置获取都会基于该客户端,所以本文就来梳理一下Nacos中的gRPC客户端的创建和启动过程。
类加载是工作和面试过程中常涉及的问题,类加载器顾名思义是用来加载类的一种工具。除了常见的诸如“双亲委派原则”问题,还有其他热部署,字节码增强等高级特性也与类加载器有关。本文从JDK和JVM两个层面来梳理一下Java中的类加载器及其实现。
在Java中的类加载器一文中介绍过Java中的类加载器以及它们的创建和初始化过程,它们本身之间并没有很强的关系,而且应用类加载器和扩展类加载器是由Java代码实现在JDK中的,而启动类加载器则是通过C++代码实现在Hotspot VM源码中的。而类加载过程则会串联起来这几个类加载器,而这正是本文要分析的内容。
在前面的MyBatis中Mapper接口的扫描过程一文中介绍到,MyBatis将扫描到的mapper接口对应的bean定义的类型设置为了MapperFactoryBean。这是一个FactoryBean,Spring会调用它的getObject方法来创建mapper对象。本文就来分析一下这是怎样一个过程。
NioEventLoop是Netty中最常使用的一种事件循环实现,在NioEventLoopGroup的创建过程中就会创建该类型的事件循环。本文分析一下创建过程中做了哪些操作,以及最重要的事件循环是怎样的。
当通道发生操作时,需要用通道处理器来处理这些事件。Netty中将事件的处理和业务进行解耦,让用户只需要编写处理事件的逻辑,将其封装在通道处理器中,然后添加到通道流水线中即可。这样事件发生时,会自动调用到通道处理器中的事件处理逻辑。本文来分析一下通过流水线的实现原理。