声明式事务使用 Spring事务是我们日常工作中经常使用的一项技术,Spring提供了编程、注解、aop切面三种方式供我们使用Spring事务,其中编程式事务因为对代码入侵较大所以不被推荐使用,注解和aop切面的方式可以基于需求自行选择,我们以注解的方式为例来分析Spring事务的原理和源码实现。 首先我们简单看一下Spring事务的使用方式,配置:…
概览 Gocron是一个开源免费的定时任务管理系统。它使用Go语言开发,是一个轻量级定时任务集中调度和管理系统,用于替代Linux-crontab,旨在为开发者及运维人员提供一个高效、轻量级且用户友好的任务调度解决方案。 作为Linux-…
谷歌地图作为全球顶尖的位置数据与视觉化平台,深受广大用户亲睐。无论是寻觅驾车至友人家的便捷线路,还是探求通勤公汽的行驶方向,甚至深夜时分寻找美食慰藉,都离不开谷歌地图的协助。然而,其功能远不止于此——对于商业网站或应用程序而言,若需融入定位元素,谷歌地图提供的开发人员API无疑是最佳选择,可获取丰富的地理数据资源。 借助Google Maps…
为了探究AOP实现原理,首先定义几个类,一个Dao接口: public interface Dao { public void select(); public void insert(); } Dao接口的实现类DaoImpl: public class DaoImpl implements Dao { @Override public void…
解析切面的过程 AOP Bean定义加载——AopNamespaceHandler处理流程 回到ConfigBeanDefinitionParser的parseAspect方法: private void parseAspect(Element aspectElement, ParserContext parserContext) { ...…
代理对象实例化过程 代理对象实例化—-为生成代理代码上下文梳理 上文分析了为生成代理的条件,现在就正式看一下Spring上下文是如何为生成代理的。回到AbstractAutoProxyCreator的wrapIfNecessary方法: protected Object wrapIfNecessary(Object bean, String…
数据库事务概述 事务首先是一系列操作组成的工作单元,该工作单元内的操作是不可分割的,即要么所有操作都做,要么所有操作都不做,这就是事务。 事务必需满足ACID(原子性、一致性、隔离性和持久性)特性,缺一不可: 原子性(Atomicity):即事务是不可分割的最小工作单元,事务内的操作要么全做,要么全不做;…
SpringBoot 3.3 拥有许多增强功能。在本文中,我们将探讨虚拟线程(Virtual Threads)及其在 3.3 版本中的改进。 什么是虚拟线程? 虚拟线程是传统平台线程的一种更轻量级的替代方案。它们由 JVM…
loadBeanDefinitions loadBeanDefinitions: 源码阅读 入口是loadBeanDefinitions方法 protected void loadBeanDefinitions(XmlBeanDefinitionReader reader) throws IOException { String[]…
前言 AOP的基础是Java动态代理,了解和使用两种动态代理能让我们更好地理解 AOP,在讲解AOP之前,让我们先来看看Java动态代理的使用方式以及底层实现原理。 本文是基于jdk1.8来对动态代理的底层机制进行探究的 Java代理介绍…