Mybatis的执行流程
原文链接:https://blog.youkuaiyun.com/u014745069/article/details/80788127
- 首先加载Mybatis的核心配置文件,如果根据核心配置文件生成Configuration对象和一个个MapperStatement对象;
- SqlSessionFactoryBuilder通过Configuration对象生成SqlsessionFactory,用来开启Sqlsession
- Sqlsession完成和数据库的交互
- 当用户调用Mapper中的方法时,Sqlsession通过被调用方法的Statement ID 找到对应的MapperStatement
- Executoru执行器将mapperStatement对象进行解析,sql参数转换,动态sql生成,生成了jdbc statement对象
- jdbc执行sql语句
- 借助MapperStatement的结果映射关系,将返回结果转换成HashMap ,JavaBean等存储结构
基础jdbc的流程
原文链接:https://juejin.cn/post/6847902217006448653
- 注册驱动
- 获取数据库连接
- 创建向数据库发送SQL语句的Statement对象
- 向数据库发送sql
- 处理数据集
- 关闭连接
SpringMVC 工作原理
- 用户发送请求,直接请求到DispatcherServlet
- DispatcherServlet 根据请求调用HandlerMappering,解析到对应的Handler
- DispatcherServlet请求适配器去执行Handler,并处理相应的业务逻辑
- Handler处理完之后,会返回一个ModelAndView 对象,Model是返回的数据对象,View是逻辑上的View
- ViewResolver会根据逻辑view查找实际的view,DispatcherServlet将model传递给view进行视图渲染
- 把view返回给请求者
SpringBoot的自动装配原理和启动流程
main方法中SpringApplication.run(.class,args)的执行流程中有一个refreshContext(context)方法,而这个方法内部会解析配置类上的@EnableAutoConfiguration注解,这个注解内部会AutoConfigurationImportSelector类,这个类中有一个方法会读取spring.factories文件,而这个文件就配置了自动装配的类,最后配置类的条件,自动装配类。
Spring Bean的生命周期
Bean容器找到配置的Spring bean定义,进行实例化,如果涉及属性设置,就通过依赖注入来设置对象属性,Spring会检测bean是否实现了一下aware接口,并设置相关依赖,然后再看是否存在与该bean相关的BeanPostProcessor,如果有就执行前置方法,如果bean实现了InitializingBean接口,执行afterProperties方法,如果bean在配置文件中定义了init-method属性,执行指定的方法,此时bean就初始化完成了,是否存在与该bean相关的BeanPostProcessor,如果有就执行后置方法;当bean要销毁时,如果bean实现了DisposableBean接口,执行destroy()方法,如果在配置文件中定义了destory-method,就执行指定的方法
类加载流程
https://segmentfault.com/a/1190000038322626
加载 将class文件通过类加载器加载到内存
验证 确保class文件不会危害虚拟机的安全,符合当前虚拟机的要求
准备 为类变量分配内存空间,并且设置类变量的初始值
解析 将符号引用变成直接引用
初始化 对类变量进行赋值和执行静态代码块
类加载器和双亲委派机制
启动类加载器 jvm启动的时候,会优先加载<Java_Home>\lib这个目录下的核心类库
扩展类加载器 负责加载<Java_Home>\lib\ext这个目录的类
应用程序类加载器 负责加载我们写的代码
用户自定义类加载器 根据我们的需要,加载特定的类
生成对象流程
类加载检查
分配内存 (指针碰撞和空闲列表)
初始化零值 虚拟机把分配到的内存空间全部初始化为零值(不包括对象头)
设置对象头 虚拟机要对对象进行必要的设计,例如这个对象是那个类的实 例、如何才能找到类的元数据信息、对象的哈希吗、对象的 GC 分代年龄等信息。这些信息存放在对 象头中
执行init() 方法 把对象按照程序员的意愿进行初始化