- 博客(12)
- 收藏
- 关注
原创 Spring源码之Spring MVC(下篇)
在Servlet3.0及之后版本中,Web应用支持无web.xml配置文件进行配置的核心原理为servlet容器在启动过程中,基于Java的SPI机制,扫描、加载并调用实现了ServletContainerInitializer接口的初始化器,完成对servlet、filter等配置工作。 在Spring中该接在实现为SpringServletContainerInitializer,其连接了servlet容器与Spring容器。
2024-11-27 18:50:15
997
原创 Spring源码之Spring MVC(上篇)
Spring MVC作为Spring框架的一部分,遵循MVC设计模式,用于提供Web框架功能。基于Servlet API的核心实现为DispatcherServlet,作为前端控制器,用于分发前端请求。内部通过HandlerMapping、HandlerAdapter、ViewResolver,完成了请求解析映射、请求业务逻辑调用、请求返回值处理解析。并且还通过HandlerInterceptor,提供了请求业务逻辑调用前、后、完成(视图渲染完成)三个阶段的扩展口,便于程序员自定义请求业务逻辑的执行。
2024-09-16 15:15:59
1483
原创 Spring源码之事务管理
Spring事务管理的核心实现原理为通过AOP的方式,使用事务拦截器 (Transaction Interceptor)对有事务注解标记@Transactional的业务方法进行拦截,进行统一的事务开启、提交/回滚的管理。通过将autocommit设置为false,通过任务执行情况控制执行commit或者rollback。在使用方式上提供了编程式事务、声明式事务来攻程序员灵活选用,以满足不同场景的需求。
2024-09-01 22:50:43
1002
原创 Spring源码之AOP(下篇)
Spring AOP的核心实现思想是「动态代理」,通过创建源对象的代理对象,并在代理对象代理的目标方法中,增加调用「拦截」,并将程序员实现的切面逻辑转换成为「拦截器链」,利用递归后入先出的特性,确保了目标方法调用前、后的拦截逻辑能够正常执行。代理对象的创建会根据被代理对象是否实现了接口及是否配置了使用目标类进行代理对象创建来选择代理对象的创建方式。如果目标类未实现任何接口,则会使用Jdk动态代理类创建代理对象,否则选择CGLIB代理来创建对象。
2024-08-25 16:10:09
1049
原创 Spring源码之AOP(上篇)
AOP作为一种编程范式,弥补OOP很难优雅处理横跨在程序多个模块的公共行为,其将这些行为从业务逻辑中分离,降低了代码的耦合度,使得业务层能专注于业务的实现。其核心概念有切面、连接点、通知、切点、织入。Spring AOP作为AOP的实现框架之一,通过代理模式实现了AOP,其代理对象的创建方式有两种:①JDK动态代理;②CGLIB。其核心组成为Advisor、Advice、Pointcut,通过这三个接口的实现,完成了切面相关概念的抽象,方便了与AspectJ的结合。
2024-08-18 23:34:01
683
原创 Spring源码之循环依赖
在Spring中,通过引入singletonsCurrentlyInCreation、singletonObjects、earlySingletonObjects、singletonFactories、earlyProxyReferences缓存,解决普通/代理对象的循环依赖问题。无法解决的循环依赖情况有:①构造方法注入;②依赖与被依赖的Bean均为多例Bean。
2024-08-10 00:21:28
713
原创 Spring源码之依赖注入
依赖注入(Dependency Injection,简称DI)是控制反转(Inversion of Control,简称IoC)一种具体实现技术,作为Spring核心功能,解耦了对象的创建与使用,即我们可以不用显示的创建对象的依赖,而是通过外部容器在运行时完成对象的注入。注入点为@Autowired、@Resource、@Inject、@Value注解标记的属性、方法,通过反射的方式进行值注入。
2024-08-04 19:33:56
846
原创 Spring源码之Bean的生命周期
Bean的生命周期主要分为前置准备(Spring容器创建、BeanFactory创建、BenDefinition创建)、实例化、属性填充、初始化、销毁这几个阶段
2024-07-27 23:21:22
454
原创 Spring源码之BeanDefinition扫描创建注册流程
ConfigurationClassPostProcessor作为Spring容器启动流程中一个非常重要的类,通过实现自BeanDefinitionRegistryPostProcessor的processConfigBeanDefinitions(BeanDefinitionRegistry registry)方法完成了BeanDefinition的扫描、创建、注册,核心步骤为。
2024-07-27 12:00:00
456
原创 Spring源码之Spring容器启动流程
Spring提供了XML配置和Java配置两种配置方式,分别对应ClassPathXmlApplicationContext和AnnotationConfigApplicationContext两个入口类,这两个入口类均继承了AbstractApplicationContext类。本文将通过Java配置+AnnotationConfigApplicationContext来分析Spring容器的启动流程。以下内容均基于Spring5.3.37版本进行分析。
2024-07-21 00:17:21
841
1
原创 依赖反转原则(Dependence Inversion Principle)
1.高层模块不要依赖低层模块。高层模块和低层模块应该通过抽象来互相依赖。2.抽象不要依赖具体实现细节,具体实现细节依赖抽象。
2022-06-13 23:59:38
228
SQL-递归查询-基于PostgreSQL数据库表补充完善树形信息
2024-08-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人