03 2025 档案
摘要:一、先从Servlet案例说起 1、编写Servlet代码 2、配置web.xml(可选) 二、从DispatcherServlet说起 有Servlet基础的同学应该都知道,前端的每一个请求都会由一个Servlet来处理。在最原始的Java Web开发中,我们需要写自己的Servlet, 然后再标
阅读全文
摘要:目录 1、执行器介绍 执行器的选择入口 设置执行器两种方式 全局配置(不建议) 局部设置(建议) 2、三个执行器区别 SimpleExecutor ReuseExecutor BatchExecutor 总结 3、效率测试 4、平时开发使用 一、执行器介绍 Mybatis中执行器关系如上图所示,真正
阅读全文
摘要:一、运行原理 二、配置文件的解析以及创建SqlSessionFactory 首先通过配置文件的文件流创建SqlSessionFactoryBuilder对象 调用build方法,传入文件流 之后通过解析器解析xml配置文件 通过XPathParse解析configuration节点,获取根节点,之后
阅读全文
摘要:步骤1 前面已经创建了MathCal的代理对象了,我们在调用方法时加一个断点 这里返回的确实是代理对象,这个对象中保存了详细信息(增强器,原始对象等),我们进入bean.add(2, 10) 中,来到 org.springframework.aop.framework.CglibAopProxy.D
阅读全文
摘要:步骤1 finishBeanFactoryInitialization(beanFactory), 完成BeanFactory的初始化工作,就是来创建剩下的单实例bean, 在创建的过程中就会被各个后置处理器拦截掉,下面我们就看看finishBeanFactoryInitialization(bea
阅读全文
摘要:步骤1 我们从配置类上的@EnableAspectJAutoProxy 注解入手,进入发现这个注解上又有一个@Import(AspectJAutoProxyRegistrar.class)注解, 了解Spring注解式开发的都知道,@Import是可以导入组件到IOC容器中的,而其中的AspectJ
阅读全文
摘要:目录 1、属性介绍 2、传播机制 准备例子 总结 3、原理 4、失效场景 一、属性介绍 1、isolation 属性 事务的隔离级别,默认值为 Isolation.DEFAULT。可选的值有: Isolation.DEFAULT:使用底层数据库默认的隔离级别 Isolation.READ_UNCOM
阅读全文
摘要:目录 1、什么是三级缓存 2、三级缓存详解 Bean实例化前 属性赋值/注入前 初始化后 总结 3、怎么解决的循环依赖 4、不用三级缓存不行吗 5、总结 一、什么是三级缓存 就是在Bean生成流程中保存Bean对象三种形态的三个Map集合,如下: 用来解决什么问题 ? 这个大家应该熟知了,就是循环依
阅读全文
摘要:目录 1、XML方式注入 set方式注入 构造方法注入 2、注解方式注入 @Component + @ComponentScan @Configuration + @Bean + @ComponentScan @Import 3、实现ImportBeanDefinitionRegistrar接口 4
阅读全文
摘要:目录 1、BeanDefinition 2、BeanDefinitionReader 3、BeanDefinitionRegistry 4、BeanFactory 5、ApplicationContext 6、BeanPostProcessor 7、BeanFactoryPostProcessor
阅读全文
摘要:目录 一、容器启动 IOC启动流程 重点 二、扫描并注册BeanDefination 加载并过滤资源 注册BeanDefination 三、BeanFactory后置处理 四、注册Bean后置处理器 五、遍历BeanDefination,实例化单例Bean preInstantiateSinglet
阅读全文
摘要:目录 一、AOP结构介绍 @Pointcut 通知 原理 连接点 拦截器 二、Bean介入点 EnableAspectJAutoProxy AspectJAutoProxyRegistrar AnnotationAwareAspectJAutoProxyCreator AbstractAutoPro
阅读全文
摘要:一、定义 postProcessBeforeInstantiation 是 Spring AOP 动态代理的核心扩展点,通过提前创建代理对象优化性能,并支持丰富的自定义逻辑(如事务、安全) 二、代码分析 public Object postProcessBeforeInstantiation(Cla
阅读全文
摘要:一、定义 resolveBeforeInstantiation 是 Spring 框架中 AbstractAutowireCapableBeanFactory 类的核心方法之一,它在 Bean 的实例化阶段扮演了关键角色。它的核心作用是:在 Bean 的默认实例化流程开始之前,提供一个扩展点,允许开
阅读全文
摘要:一、基础概念 在分库分表场景下,关联表(JOIN)查询的复杂性主要源于数据分布在不同的数据库或表中。ShardingSphere 通过 绑定表(Binding Table) 和 广播表(Broadcast Table) 机制,结合 内存计算, 有效解决关联查询的难题。以下是具体实现方法和优化策略 二
阅读全文
摘要:一、底层原理 在 MySQL 8.0 中,当使用 limit offset, count 进行分页查询时,如果 offset 非常大(例如 limit 200000, 10),性能会显著下降。 这是因为 MySQL 需要扫描 offset + count 行数据,然后丢弃前 offset 行,只返回
阅读全文
摘要:步骤一、启用慢查询日志 慢查询日志是MySQL记录执行时间超过指定阈值的SQL语句 配置慢查询日志 在MySQL配置文件(如my.cnf或my.ini)中设置以下参数: slow_query_log:是否启用慢查询日志 slow_query_log_file:指定慢查询日志文件的保存位置 long_
阅读全文
摘要:一、ThreadLocal 内存泄漏的原因 ThreadLocal 的内存泄漏问题主要与其底层实现 ThreadLocalMap 的结构和垃圾回收机制有关。以下是核心原因: 1、ThreadLocalMap 的 Entry 设计 键(Key)是弱引用:ThreadLocalMap 中的键(Key)是
阅读全文
摘要:一、定义 CyclicBarrier 的 await() 方法是其核心功能之一,用于让线程在屏障点等待,直到所有参与的线程都到达屏障后,才能继续执行。 其底层实现依赖于 AQS(AbstractQueuedSynchronizer) 和 ReentrantLock,以下是 await() 方法的底层
阅读全文
摘要:一、release() 方法代码解析 当调用 release() 方法时,实际调用的是 AQS 的 releaseShared(1) 方法。以下是其详细工作流程: public final boolean releaseShared(int arg) { if (tryReleaseShared(a
阅读全文
摘要:一、acquire() 的工作流程 当调用 acquire() 方法时,实际调用的是 AQS 的 acquireSharedInterruptibly(1) 方法。以下是其详细工作流程: // acquire() -> sync.acquireSharedInterruptibly(1),可中断 p
阅读全文
摘要:一、简单使用 在聊它的源码之前,我们先来做个简单的使用说明。当我在IDEA中创建了一个简单的Demo之后,它会给出以下提示 提示文字 在使用阻塞等待获取锁的方式中,必须在try代码块之外,并且在加锁方法与try代码块之间没有任何可能抛出异常的方法调用,避免加锁成功后,在finally中无法解锁。 1
阅读全文
摘要:一、CountDownLatch的构造方法 // 创建倒数闩,设置倒数的总数State的值 CountDownLatch doneSignal = new CountDownLatch(N); 二、countDown() 方法的作用 countDown() 方法的主要作用是将 CountDownLa
阅读全文

浙公网安备 33010602011771号