摘要: 源码分析 插件机制 首先我们看下MyBatis拦截器的接口定义: public interface Interceptor { Object intercept(Invocation invocation) throws Throwable; Object plugin(Object target) 阅读全文
posted @ 2025-01-08 22:27 程序员Seven 阅读(209) 评论(0) 推荐(0)
摘要: 引入 我们在使用mybatis的时候,会在xml中编写sql语句。比如这段动态sql代码: <update id="update" parameterType="org.format.dynamicproxy.mybatis.bean.User"> UPDATE users <trim prefix 阅读全文
posted @ 2025-01-07 08:15 程序员Seven 阅读(669) 评论(0) 推荐(1)
摘要: sqlSessionFactory 与 SqlSession 正如其名,Sqlsession对应着一次数据库会话。由于数据库会话不是永久的,因此Sqlsession的生命周期也不应该是永久的,相反,在你每次访问数据库时都需要创建它(当然并不是说在Sqlsession里只能执行一次sql,你可以执行多 阅读全文
posted @ 2025-01-06 08:15 程序员Seven 阅读(670) 评论(0) 推荐(0)
摘要: 配置解析主体方法 public Configuration parse() { if (parsed) { throw new BuilderException("Each XMLConfigBuilder can only be used once."); } parsed = true; //源 阅读全文
posted @ 2025-01-02 08:15 程序员Seven 阅读(417) 评论(0) 推荐(2)
摘要: 主要构件及其相互关系 主要构件: 主要的核心部件解释如下: SqlSession: 作为MyBatis工作的主要顶层API,表示和数据库交互的会话,完成必要数据库增删改查功能 Executor:MyBatis执行器,是MyBatis 调度的核心,负责SQL语句的生成和查询缓存的维护 Statemen 阅读全文
posted @ 2024-12-31 08:15 程序员Seven 阅读(444) 评论(0) 推荐(1)
摘要: 概述 JDBC(Java DataBase Connectivity)是Java和数据库之间的一个桥梁,是一个「规范」而不是一个实现,能够执行SQL语句。JDBC由一组用Java语言编写的类和接口组成。各种不同类型的数据库都有相应的实现,注意:本文中的代码都是针对MySQL数据库实现的。 先看一个案 阅读全文
posted @ 2024-12-30 08:15 程序员Seven 阅读(176) 评论(0) 推荐(0)
摘要: 写在前面 springboot遵从约定大于配置的原则,极大程度的解决了配置繁琐的问题。在此基础上,又提供了spi机制,用spring.factories可以完成一个小组件的自动装配功能。 在一般业务场景,可能是不需要关心一个bean是如何被注册进spring容器的,只需要把需要注册进容器的bean声 阅读全文
posted @ 2024-12-26 08:15 程序员Seven 阅读(736) 评论(1) 推荐(3)
摘要: 事务管理在系统开发中是不可缺少的一部分,Spring提供了很好事务管理机制 分类 主要分为编程式事务和声明式事务两种。 编程式事务 是指在代码中手动的管理事务的提交、回滚等操作,代码侵入性比较强,如下示例: try { //TODO something transactionManager.comm 阅读全文
posted @ 2024-12-24 08:15 程序员Seven 阅读(1476) 评论(0) 推荐(1)
摘要: 动态代理概述 什么是代理 代理模式(Proxy pattern): 为另一个对象提供一个替身或占位符以控制对这个对象的访问 什么是动态代理? 动态代理就是,在程序运行期,创建目标对象的代理对象,并对目标对象中的方法进行功能性增强的一种技术。 在生成代理对象的过程中,目标对象不变,代理对象中的方法是目 阅读全文
posted @ 2024-12-23 08:15 程序员Seven 阅读(422) 评论(0) 推荐(0)
摘要: 生命周期的整体流程 Spring 容器可以管理 singleton 作用域 Bean 的生命周期,在此作用域下,Spring 能够精确地知道该 Bean 何时被创建,何时初始化完成,以及何时被销毁。 而对于 prototype 作用域的 Bean,Spring 只负责创建,当容器创建了 Bean 的 阅读全文
posted @ 2024-12-19 08:15 程序员Seven 阅读(436) 评论(0) 推荐(3)
摘要: 首先,有两种Bean注入的方式:构造器注入和属性注入。 对于构造器注入的循环依赖,Spring处理不了,会直接抛出BeanCurrentlylnCreationException异常。 对于属性注入的循环依赖 单例模式下,是通过三级缓存处理来循环依赖的。 非单例对象的循环依赖,则无法处理。 单例模式 阅读全文
posted @ 2024-12-18 08:15 程序员Seven 阅读(173) 评论(0) 推荐(0)
摘要: IOC容器的初始化整体过程 Spring是如何实现将资源配置(以xml配置为例)通过加载,解析,生成BeanDefination并注册到IoC容器中的?这主要会经过以下 4 步: 从XML中读取配置文件,并将配置文件转换为Document 再将Document中的 bean标签解析成 BeanDef 阅读全文
posted @ 2024-12-16 08:15 程序员Seven 阅读(466) 评论(0) 推荐(2)
摘要: 介绍 IoC(Inversion of Control:控制反转) 是一种设计思想,而不是一个具体的技术实现。IoC 的思想就是将原本在程序中手动创建对象的控制权,交由 Spring 框架来管理,由Spring容器管理bean的整个生命周期。通俗来说就是IoC是设计思想,DI是实现方式。 通过反射实 阅读全文
posted @ 2024-12-12 08:15 程序员Seven 阅读(660) 评论(1) 推荐(3)
摘要: 介绍 AOP,面向切面编程,作为面向对象的一种补充,将公共逻辑(事务管理、日志、缓存、权限控制、限流等)封装成切面,跟业务代码进行分离,可以减少系统的重复代码和降低模块之间的耦合度。切面就是那些与业务无关,但所有业务模块都会调用的公共逻辑。 先看一个例子:如何给如下UserServiceImpl中所 阅读全文
posted @ 2024-12-10 08:15 程序员Seven 阅读(788) 评论(2) 推荐(1)
摘要: 为什么用Spring 什么是Spring Spring 是一款开源的轻量级 Java 开发框架,旨在提高开发人员的开发效率以及系统的可维护性。 Spring的一个最大的目的就是使JAVA EE开发更加容易。同时,Spring之所以与Struts、Hibernate等单层框架不同,是因为Spring致 阅读全文
posted @ 2024-12-09 08:15 程序员Seven 阅读(2851) 评论(0) 推荐(2)
摘要: 概述 Redis单实例的架构,从最开始的一主N从,到读写分离,再到Sentinel哨兵机制,单实例的Redis缓存足以应对大多数的使用场景,也能实现主从故障迁移。 但是,在某些场景下,单实例存Redis缓存会存在的几个问题: 写并发:Redis单实例读写分离可以解决读操作的负载均衡,但对于写操作,仍 阅读全文
posted @ 2024-12-07 18:13 程序员Seven 阅读(483) 评论(0) 推荐(2)
摘要: 概述 Redis的高可用机制有持久化、复制、哨兵和集群。其主要的作用和解决的问题分别是: 持久化:持久化是最简单的高可用方法(有时甚至不被归为高可用的手段),主要作用是数据备份,即将数据存储在硬盘,保证数据不会因进程退出而丢失。 复制:复制是高可用Redis的基础,哨兵和集群都是在复制基础上实现高可 阅读全文
posted @ 2024-12-04 23:37 程序员Seven 阅读(884) 评论(0) 推荐(3)
摘要: 本地缓存带来的挑战 分布式缓存相比于本地缓存,在实现层面需要关注的点有哪些不同。梳理如下: 维度 本地缓存 集中式缓存 缓存量 受限于单机内存大小,存储数据有限 需要提供给分布式系统里面所有节点共同使用,对于大型系统而言,对集中式缓存的容量诉求非常的大,远超单机内存的容量大小。 可靠性 影响有限,只 阅读全文
posted @ 2024-12-02 08:15 程序员Seven 阅读(852) 评论(0) 推荐(3)
摘要: 使用复杂度高的命令 Redis提供了慢日志命令的统计功能 首先设置Redis的慢日志阈值,只有超过阈值的命令才会被记录,这里的单位是微妙,例如设置慢日志的阈值为5毫秒,同时设置只保留最近1000条慢日志记录: # 命令执行超过5毫秒记录慢日志 CONFIG SET slowlog-log-slowe 阅读全文
posted @ 2024-11-28 08:15 程序员Seven 阅读(601) 评论(0) 推荐(1)
摘要: 分布式锁 概述 分布式锁指的是,所有服务中的所有线程都去获取同一把锁,但只有一个线程可以成功的获得锁,其他没有获得锁的线程必须全部等待,直到持有锁的线程释放锁。 分布式锁是可以跨越多个实例,多个进程的锁 分布式锁具备的条件: 互斥性:任意时刻,只能有一个客户端持有锁 锁超时释放:持有锁超时,可以释放 阅读全文
posted @ 2024-11-26 08:15 程序员Seven 阅读(813) 评论(0) 推荐(1)