![](https://i-blog.csdnimg.cn/direct/6b2c36d42f064854a3815e995b302d10.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Spring
文章平均质量分 96
以日常使用为例,辅以原理分析及源码解读,提升对Spring的使用、问题排查解决能力,复杂模块的设计能力,源码阅读能力
梦想家Who
这个作者很懒,什么都没留下…
展开
-
Spring源码之Spring容器启动流程
Spring提供了XML配置和Java配置两种配置方式,分别对应ClassPathXmlApplicationContext和AnnotationConfigApplicationContext两个入口类,这两个入口类均继承了AbstractApplicationContext类。本文将通过Java配置+AnnotationConfigApplicationContext来分析Spring容器的启动流程。以下内容均基于Spring5.3.37版本进行分析。原创 2024-07-21 00:17:21 · 728 阅读 · 1 评论 -
Spring源码之BeanDefinition扫描创建注册流程
ConfigurationClassPostProcessor作为Spring容器启动流程中一个非常重要的类,通过实现自BeanDefinitionRegistryPostProcessor的processConfigBeanDefinitions(BeanDefinitionRegistry registry)方法完成了BeanDefinition的扫描、创建、注册,核心步骤为。原创 2024-07-27 12:00:00 · 390 阅读 · 0 评论 -
Spring源码之Bean的生命周期
Bean的生命周期主要分为前置准备(Spring容器创建、BeanFactory创建、BenDefinition创建)、实例化、属性填充、初始化、销毁这几个阶段原创 2024-07-27 23:21:22 · 401 阅读 · 0 评论 -
Spring源码之依赖注入
依赖注入(Dependency Injection,简称DI)是控制反转(Inversion of Control,简称IoC)一种具体实现技术,作为Spring核心功能,解耦了对象的创建与使用,即我们可以不用显示的创建对象的依赖,而是通过外部容器在运行时完成对象的注入。注入点为@Autowired、@Resource、@Inject、@Value注解标记的属性、方法,通过反射的方式进行值注入。原创 2024-08-04 19:33:56 · 712 阅读 · 0 评论 -
Spring源码之循环依赖
在Spring中,通过引入singletonsCurrentlyInCreation、singletonObjects、earlySingletonObjects、singletonFactories、earlyProxyReferences缓存,解决普通/代理对象的循环依赖问题。无法解决的循环依赖情况有:①构造方法注入;②依赖与被依赖的Bean均为多例Bean。原创 2024-08-10 00:21:28 · 619 阅读 · 0 评论 -
Spring源码之AOP(上篇)
AOP作为一种编程范式,弥补OOP很难优雅处理横跨在程序多个模块的公共行为,其将这些行为从业务逻辑中分离,降低了代码的耦合度,使得业务层能专注于业务的实现。其核心概念有切面、连接点、通知、切点、织入。Spring AOP作为AOP的实现框架之一,通过代理模式实现了AOP,其代理对象的创建方式有两种:①JDK动态代理;②CGLIB。其核心组成为Advisor、Advice、Pointcut,通过这三个接口的实现,完成了切面相关概念的抽象,方便了与AspectJ的结合。原创 2024-08-18 23:34:01 · 617 阅读 · 0 评论 -
Spring源码之AOP(下篇)
Spring AOP的核心实现思想是「动态代理」,通过创建源对象的代理对象,并在代理对象代理的目标方法中,增加调用「拦截」,并将程序员实现的切面逻辑转换成为「拦截器链」,利用递归后入先出的特性,确保了目标方法调用前、后的拦截逻辑能够正常执行。代理对象的创建会根据被代理对象是否实现了接口及是否配置了使用目标类进行代理对象创建来选择代理对象的创建方式。如果目标类未实现任何接口,则会使用Jdk动态代理类创建代理对象,否则选择CGLIB代理来创建对象。原创 2024-08-25 16:10:09 · 978 阅读 · 0 评论 -
Spring源码之事务管理
Spring事务管理的核心实现原理为通过AOP的方式,使用事务拦截器 (Transaction Interceptor)对有事务注解标记@Transactional的业务方法进行拦截,进行统一的事务开启、提交/回滚的管理。通过将autocommit设置为false,通过任务执行情况控制执行commit或者rollback。在使用方式上提供了编程式事务、声明式事务来攻程序员灵活选用,以满足不同场景的需求。原创 2024-09-01 22:50:43 · 495 阅读 · 0 评论