03 2025 档案

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