2021Java面试笔试总结!手动实现一个简单的AOP框架

2021/7/4 14:22:54

本文主要是介绍2021Java面试笔试总结!手动实现一个简单的AOP框架,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

### 正文 MyBatis 的整体架构分为三层, 分别是**基础支持层**、**核心处理层**和**接口层**,如下图所示。 ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210704/1625375741937840.jpg) ### 基础支持层 **反射模块** 该模块对 Java 原生的反射进行了良好的封装,提供了更加简洁易用的 API ,方便上层使调用,并且对反射操作进行了一系列优化,例如缓存了类的元数据,提高了反射操作的性能。? **类型转换模块** 类型转换模块提供了两个主要功能,一个功能是别名机制,MyBatis 为了简化配置文件提供了别名机制;另一个功能是实现 JDBC 类型与 Java 类型之间的转换,该功能在为 SQL 语句绑定实参以及映射查询结果集时都会涉及。 **日志模块** 提供详细的日志输出信息,并且能够集成多种日志框架,其日志模块的一个主要功能就是集成第三方日志框架。 **资源加载模块** 资源加载模块主要是对类加载器进行封装,确定类加载器的使用顺序,并提供了加载类文件以及其他资源文件的功能。? **解析器模块** 解析器模块主要提供两个功能,一个功能是对 XPath 进行封装,为 MyBatis 初始化时解析 mybatis-config.xml 配置文件以及映射配置文件提供支持;另一个功能是为处理动态 SQL 语句中的占位符提供支持。 **数据源模块** MyBatis 自身提供了相应的数据源实现,也提供了与第三方数据源集成的接口。 **事务管理** MyBatis 对数据库中的事务进行了抽象,其自身提供了相应的事务接口和简单实现。一般在应用中,MyBatis 会与 Spring 框架集成,并由 Spring 框架管理事务。 **缓存模块** MyBatis 中提供了一级缓存和二级缓存,而这两级缓存都是依赖于基础支持层中的缓存模块实现的。MyBatis 中自带的这两级缓存与 MyBatis ?以及整个应用是运行在同一个 JVM 中的,共享同一块堆内存。如果这两级缓存中的数据量较大, 则可能影响系统中其他功能的运行,所以当需要缓存大量数据时,优先考虑使用 Redis 、Memcache 等缓存产品。 **Binding 模块** 在调用 SqlSession 相应方法执行数据库操作时,需要指定映射文件中定义的 SQL 节点,如果出现拼写错误,我们只能在运行时才能发现相应的异常。为了尽早发现这种错误,MyBatis 通过 Binding 模块将用户自定义的 Mapper 接口与映射配置文件关联起来,系统可以通过调用自定义 Mapper 接口中的方法执行相应的SQL 语句完成数据库操作,从而避免上述问题。 需要注意的是,开发人员无须编写自定义 Mapper 接口的实现,MyBatis 会自动为其创建动态代理对象。 ### 核心处理层 在核心处理层中实现了 MyBatis 的核心处理流程,其中包括 MyBatis 的初始化以及完成一次数据库操作涉及的全部流程。 **配置解析** 在 MyBatis 初始化过程中,会加载 mybatis-config.xml 配置文件、映射配置文件以及 Mapper 接口中的注解信息,解析后的配置信息会形成相应的对象并保存到 Configuration 对象中。之后,利用该 Configuration 对象创建 SqlSessionFactory 对象。待 MyBatis 初始化之后,开发人员可以通过初始化得到 SqlSessionFactory 创建 SqlSession 对象并完成数据库操作。 **SOL 解析与 scripting 模块** 拼凑 SQL 语句是一件烦琐且易出错的过程,为了将开发人员从这项枯燥无趣的工作中解脱出来,MyBatis 实现动态 SQL 语句的功能,提供了多种动态 SQL 语句对应的节点,例如, 节点、 节点、 节点等。通过这些节点的组合使用,开发人员可以写出几乎满足所有需求的动态 SQL 语句。 MyBatis 中的 scripting 模块会根据用户传入的实参,解析映射文件中定义的动态 SQL 节点,并形成数据库可执行的 SQL 语句。之后会处理 SQL 语句中的占位符,绑定用户传入的实参。 **SQL?执行** SQL 语句的执行涉及多个组件,其中比较重要的是 Executor 、StatementHandler 、ParameterHandler 和 ResultSetHandler。Executor 主要负责维护一级缓存和二级缓存,并提供事务管理的相关操作,它会将数据库相关操作委托给 StatementHandler 完成。StatementHandler 首先通过 ParameterHandler 完成 SQL 语句的实参绑定;然后通过 java.sql.Statement 对象执行 SQL 语句并得到结果集;最后通过 ResultSetHandler 完成结果集的映射,得到结果对象并返回。 **插件** 用户可以通过添加自定义插件的方式对 MyBatis 进行扩展。用户自定义插件也可以改变 MyBatis 的默认行为,例如,我们可以拦截 SQL 语句并对其进行重写。由于用户自定义插件会影响 MyBatis 的核心行为,在使用自定义插件之前,开发人员需要了解 MyBatis 内部的原理,这样才能编写出安全、高效的插件。 下图展示了?MyBatis?执行一条?SQL?语句的大致过程。 ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210704/1625375741693536.jpg) ### 接口层 接口层相对简单,其核心是 SqlSession 接口,该接口中定义了 MyBatis 暴露给应用程序调用的 API,也就是上层应用与 MyBatis 交互的桥梁。接口层在接收到调用请求时,会调用核心处理层的相应模块来完成具体的数据库操作。 可以通过 MyBatis?源码的目录结构查看各个模块的具体实现,目录结构如下图所示。 ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210704/1625375741532498.jpg) 封装的很清晰,基本是一个模块一个?package。 ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210704/1625375741771411.jpg) # Spring全套教学资料 **Spring是Java程序员的《葵花宝典》,其中提供的各种大招,能简化我们的开发,大大提升开发效率!目前99%的公司使用了Spring,大家可以去各大招聘网站看一下,Spring算是必备技能,所以一定要掌握。** **资料领取方式:[点击这里前往蓝色传送门](https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB)** **目录:** ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210704/1625375742349746.jpg) ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210704/1625375742806553.jpg) **部分内容:** ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210704/1625375742269554.jpg) ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210704/1625375742701837.jpg) # Spring源码 * 第一部分 Spring 概述 * 第二部分 核心思想 * 第三部分 手写实现 IoC 和 AOP(自定义Spring框架) * 第四部分 Spring IOC 高级应用 基础特性 高级特性 * 第五部分 Spring IOC源码深度剖析 设计优雅 设计模式 注意:原则、方法和技巧 * 第六部分 Spring AOP 应用 声明事务控制 * 第七部分 Spring AOP源码深度剖析 必要的笔记、必要的图、通俗易懂的语言化解知识难点 ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210704/1625375742596995.jpg) ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210704/1625375743786672.jpg) # 脚手框架:SpringBoot技术 > 它的目标是简化Spring应用和服务的创建、开发与部署,简化了配置文件,使用嵌入式web服务器,含有诸多开箱即用的微服务功能,可以和spring cloud联合部署。 > > Spring Boot的核心思想是约定大于配置,应用只需要很少的配置即可,简化了应用开发模式。 * SpringBoot入门 * 配置文件 * 日志 * Web开发 * Docker * SpringBoot与数据访问 * 启动配置原理 * 自定义starter ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210704/1625375743898070.jpg) ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210704/1625375743782897.jpg) # 微服务架构:Spring Cloud Alibaba > 同 Spring Cloud 一样,Spring Cloud Alibaba 也是一套微服务解决方案,包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。 * 微服务架构介绍 * Spring Cloud Alibaba介绍 * 微服务环境搭建 * 服务治理 * 服务容错 * 服务网关 * 链路追踪 * ZipKin集成及数据持久化 * 消息驱动 * 短信服务 * Nacos Confifig—服务配置 * Seata—分布式事务 * Dubbo—rpc通信 ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210704/1625375743348828.jpg) ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210704/1625375743560310.jpg) # Spring MVC **目录:** ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210704/1625375744724329.jpg) ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210704/1625375744243379.jpg) ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210704/1625375744809094.jpg) **部分内容:** ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210704/1625375744444392.jpg) ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210704/1625375744369658.jpg)

这篇关于2021Java面试笔试总结!手动实现一个简单的AOP框架的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程