自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 【springMVC】springMVC学习系列一:springMVC的组件

spring mvc 它解决了什么问题呢?上术解决在spring mvc 中都体现在如下组件当中HandlerMapping: url与控制器的映谢HandlerAdapter: 控制器执行适配器ViewResolver:视图仓库view:具体解析视图HandlerExceptionResolver:异常捕捕捉器HandlerInterceptor:拦截器。

2025-05-26 16:56:49 1107

原创 【spring】spring学习系列之十一:spring的事件监听

Spring框架的事件机制(ApplicationEvent)提供了一种组件间通信的方式,允许应用程序的不同部分通过发布-订阅模式进行解耦交互。监听器需要注册到ApplicationEventMulticaster后才能监听事件,有2中注册方式1)在所有的bean实例化初始化都完成后,通过EventListenerMethodProcessor查找@EventListener注解的方法,将其生成ApplicationLister对象,然后注册到ApplicationEventMulticaster中。

2025-05-21 16:58:44 1002

原创 【spring】spring源码系列之十:spring事务管理(下)

spring通过@EnableTransactionManagement开启事务,引入了2个组件InfrastructureAdvisorAutoProxyCreator和BeanFactoryTransactionAttributeSourceAdvisor。1)InfrastructureAdvisorAutoProxyCreator用于初始化后进行AOP。

2025-05-15 11:55:23 1044

原创 【spring】spring源码系列之十:spring事务管理(中)

我们通过TransactionTemplate的使用,解读了DatasourceTransactionManager的源码1)讲解了TransactionObject的结构,TransactionObject封装了ConnectionHolder,ConnectionHolder中有rollbackOnly标记。如果上下层事务是同一个事务,那么ConnectionHolder以及其中的rollbackOnly标记就是全局的。

2025-05-15 09:47:05 1023

原创 【spring】spring源码系列之九:spring事务管理(上)

我们循序渐进,手写了MyNewTransactionManager ,完成了事务方法A调用事务方法B使用同一个事务,还原了事务传递的关键步骤:1)使用相同的数据库连接(放到ThreadLocal中)2)需要一个标识(newConnection)判断是否是新的事务,并根据这个标识决定是真正提交、回滚,还是只标记全局的状态(rollbackOnly)3)需要一个全局的状态(rollbackOnly),用于真正提交、回滚。

2025-05-15 09:44:24 744

原创 【spring】spring学习系列之八:AOP

上一篇提到了初始化后方法的AOP扩展点,这一篇讲一讲AOP的源码实现spring对代理的封装:通过ProxyFactory来获取代理对象,简化了获取代理对象的过程实例化后方法中获取AOP代理对象的过程:先获取符合的advisors,再通过ProxyFactory来获取代理对象代理对象的调用a.生成拦截器链:遍历advisors,匹配Pointcut的ClassFilter和methodMatcher,将匹配上的Advisor中的Advice取出来生成拦截器链。

2025-05-14 23:04:46 804

原创 【spring】spring学习系列之七:循环依赖

循环依赖是指两个或多个Bean相互依赖,形成闭环的情况。例如:Bean A依赖Bean B,而Bean B又依赖Bean A。@Service@Autowired@Service@Autowiredspring是怎么发现循环依赖的:spring实例化bean是单线程的,获取依赖的bean时发现依赖的bean正在创建中,那么就是循环依赖循环依赖怎么解决:通过三级缓存机制实现。

2025-05-14 16:06:54 730

原创 【spring】spring学习系列之六:spring的启动流程(下)

上一篇讲了配置类是如何解析的,各种Bean是如何生成的的。这一章将详细介绍getBean方法是如何创建bean的,创建Bean的过程中是如何执行Bean的生命周期方法的。

2025-05-13 17:35:01 742 1

原创 【spring】spring学习系列之五:spring的启动流程(中)

上文介绍了spring启动的整体流程,这里展开讲讲如何解析配置类。解析配置类主要是通过postProcessBeanDefinitionRegistry方法和postProcessorBeanFactory方法进行的。见名知意,前者是处理BeanDefinition的,可以添加BeanDefinition或者修改某个BeanDefinition;

2025-05-13 17:34:21 684

原创 【spring】spring学习系列之四:spring的启动流程(上)

前面文章介绍了spring容器的基本使用,我们不妨会有很多疑问配置类是如何解析的?配置类中的@Configuration、@ComponentScan、@Import、@ImportResource、@PropertySource、@Bean这些注解是怎么发挥作用的?自动注入是什么原理,@AutoWired和@Resource是怎么注入属性的?bean的生命周期是什么?上一篇又介绍了spring的主要类和接口,容器启动的过程中都需要哪些类,都产生了哪些类,各自有什么作用?

2025-05-13 17:33:37 701

原创 【spring】spring学习系列之三:主要类的继承结构

在学习源码之前,基础必须要打牢,所以我们需要把主要的类梳理出来,有个基本的认识,这样后续源码才容易理解。BeanDefinition表示Bean定义,BeanDefinition中存在很多属性用来描述一个Bean的特点。比如:class,表示Bean类型scope,表示Bean作用域,单例或原型等lazyInit:表示Bean是否是懒加载initMethodName:表示Bean初始化时要执行的方法destroyMethodName:表示Bean销毁时要执行的方法。

2025-05-13 17:31:23 643

原创 【spring】spring学习系列之二:spring IOC容器的基本使用

上一篇介绍了spring的整体框架和主要功能,其中IOC容器是spring的核心功能,我们平时主要也是使用的IOC容器创建和管理各种bean,所以我们先从IOC容器的使用开始,逐渐展开学习spring定义bean,可以通过有参、无参、工厂类来创建bean,还可以定义bean的scope,是否懒加载等等,有XML的方式和注解的方式。

2025-05-13 17:30:12 656

原创 【spring】spring学习系列之一:spring整体框架及主要功能介绍

引用官网的图片,这里只简单介绍spring通过IOC容器来管理所有java对象的实例化和初始化,控制对象与对象之间的依赖关系。降低程序的耦合性提高了程序的扩展性。IOC(控制反转)是一种思想,把创建对象、维护对象与对象之间关系的权利交出去,交给容器来负责。实现IOC的方式就是DI(依赖注入),DI指spring创建对象的过程中,将对象依赖的属性通过set方法或者构造方法等方式进行注入。由此可见,IOC容器的核心就是,在容器中通过DI的方式创建、管理和维护bean对象。

2025-05-13 17:26:47 708

原创 深入理解AQS的condition队列

上一篇讲了CLH队列,这一篇通过ArrayBlockingQueue的源码来讲以下condition队列

2024-08-21 00:03:46 678

原创 深入理解ThreadPoolExecutor(上):线程池的创建和运行

线程池是我们常用的一个工具,使用起来虽然比较简单,但是想弄清整个框架里面的各种逻辑和原理,还是比较不容易。我将用两篇文章来带大家深入理解线程池ThreadPoolExecutor,本文是上篇,将从线程池的创建和运行展开。线程池的创建主要讲线程池的结构,线程池的运行主要讲线程池的运行过程,比如啥时候创建worker,啥时候销毁worker,怎么获取任务等等。1.worker什么创建?

2024-08-18 19:56:12 1248

原创 深入理解ThreadPoolExecutor(下):线程池的关闭

上一篇文章讲了线程池的创建和启动,这一篇讲线程池的关闭。可能刚开始大家会觉得线程池的关闭很容易理解,不就是调用shutdown()或shutdownNow()方法,中断线程,不再接受任务,等任务执行完,工作线程数量为0时,线程池就关闭了吗。但是,仔细想想,还是会有些疑惑:1)中断线程时是怎么区分空闲线程和非空闲线程的呢?2)中断空闲线程是怎么中断的?3)中断非空闲线程是怎么中断的?如果一个线程正在执行任务,此时中断线程是真的将任务停止了吗?带着疑惑,我们来深入理解线程池的关闭。

2024-08-16 16:10:11 1356

原创 深入理解AQS的CLH队列

我们知道,AQS定义了两种队列,同步等待队列(CLH队列)和条件等待队列(CONDITION队列),在学习AQS的过程中对这两个队列总是有种雾蒙蒙的感觉,到底是怎么入队、阻塞、唤醒、出队的?到底是怎么保证并发安全的?

2024-07-29 05:12:04 1214 2

原创 nodejs、npm、webpack、vue-cli入门及使用

作为一个后端开发,每次碰到前端项目(多半是后台管理)时都十分头疼,每次都要从头开始学习Node、npm、webpack、vue-cli,这次索性就把入门用到的相关知识和使用示例都整理出来。

2024-04-03 16:06:37 1295 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除