看过源码吗?说下 Spring 由哪些重要的模块组成?
是的,Spring源码可以深入分析,Spring框架是一个庞大的生态系统,包含多个模块,每个模块都为不同的功能提供支持。以下是Spring的主要模块及其职责:
1. Core Container(核心容器)
Spring的核心容器是Spring框架的基础,提供了依赖注入(DI)和面向切面编程(AOP)等核心功能。核心容器主要由以下模块组成:
1.1 Spring Core
- 功能:提供了Spring框架的基础功能,如资源管理、类加载器等。
BeanFactory接口就属于该模块,它是依赖注入的基础。 - 相关类:
BeanFactory,ApplicationContext,BeanDefinition
1.2 Spring Beans
- 功能:提供Bean的定义、生命周期管理以及依赖注入等核心功能。负责Bean的实例化、初始化和销毁。
- 相关类:
BeanFactory,GenericWebApplicationContext,AbstractBeanDefinition,BeanPostProcessor
1.3 Spring Context
- 功能:该模块提供了更高级的应用上下文,扩展了
BeanFactory,使其支持更多功能,如国际化、事件传播、资源加载等。 - 相关类:
ApplicationContext,AnnotationConfigApplicationContext,GenericApplicationContext
1.4 Spring Expression Language (SpEL)
- 功能:提供了一种强大的表达式语言,允许在Spring配置文件中进行动态计算和查询。可用于Spring的配置、注入等地方。
- 相关类:
ExpressionParser,SpelExpressionParser,StandardEvaluationContext
2. Spring AOP(面向切面编程)
- 功能:Spring AOP模块提供了实现AOP的能力,能够拦截方法调用,在方法执行前后插入自定义逻辑。Spring AOP允许开发者通过代理对象来实现横切关注点的功能。
- 相关类:
Aspect,AspectJ,ProxyFactory,AdvisedSupport
3. Spring Data Access/Integration
这个模块包含了用于数据访问、事务管理、以及与持久化技术(如JDBC、ORM、JPA等)的集成。
3.1 JDBC
- 功能:简化JDBC编程,提供了数据源的配置、连接的管理、以及执行SQL语句的API。
- 相关类:
JdbcTemplate,NamedParameterJdbcTemplate,SimpleJdbcCall
3.2 ORM(对象关系映射)
- 功能:集成了多种ORM框架(如Hibernate、JPA、MyBatis等),简化了持久化对象与数据库之间的映射。
- 相关类:
HibernateTemplate,JpaTemplate
3.3 JMS(Java消息服务)
- 功能:提供了集成消息队列的能力,支持消息生产者和消费者的配置和管理。
- 相关类:
JmsTemplate,MessageListenerContainer
3.4 Transactions
- 功能:提供事务管理,支持声明式事务处理,简化事务的管理,支持不同的事务管理器。
- 相关类:
PlatformTransactionManager,TransactionTemplate
4. Spring Web
该模块为Web应用程序提供了基础设施,包括Servlet支持、WebSocket支持以及基于注解的控制器等功能。
4.1 Spring Web (Servlet)
- 功能:提供了基于Servlet的Web框架,支持前后端分离、请求映射、参数绑定、视图解析等功能。
- 相关类:
DispatcherServlet,HandlerMapping,ModelAndView
4.2 Spring WebFlux
- 功能:提供响应式编程支持,基于Reactive Streams和Netty实现,适用于高并发场景。
- 相关类:
RouterFunction,HandlerFunction,WebFluxConfigurer
4.3 Spring WebSocket
- 功能:支持WebSocket协议,简化了WebSocket客户端与服务器端的通信。
- 相关类:
WebSocketHandler,WebSocketConfigurer
5. Spring Security
- 功能:为Java应用提供全面的安全框架,涵盖身份认证、授权、攻击防护等。
- 相关类:
AuthenticationManager,SecurityContextHolder,AccessDecisionManager
6. Spring Testing
- 功能:提供用于单元测试和集成测试的支持,简化了Spring环境下的测试过程。
- 相关类:
@SpringBootTest,@WebMvcTest,@MockBean
7. Spring Boot
- 功能:是一个快速开发框架,简化了Spring应用程序的配置和启动。它默认配置了许多Spring组件,避免了大量繁琐的XML配置。
- 相关类:
SpringApplication,@SpringBootApplication,@EnableAutoConfiguration
8. Spring Cloud
- 功能:提供了构建分布式系统的工具,包括微服务架构、服务注册与发现、负载均衡、断路器等。
- 相关类:
EurekaServer,Feign,Ribbon,Hystrix
总结
Spring框架由多个功能模块组成,包括核心容器、AOP、数据访问、Web开发、安全性、测试、以及一些高级功能如Spring Boot和Spring Cloud等。每个模块都是为了满足不同的需求而设计,并通过协同工作提供一个灵活、高效、可扩展的企业级应用框架。
看过源码吗?说下 Spring 由哪些重要的模块组成?的更多相关文章
- 看源码,重新审视Spring Security中的角色(roles)是怎么回事
在网上看见不少的博客.技术文章,发现大家对于Spring Security中的角色(roles)存在较大的误解,最大的误解就是没有搞清楚其中角色和权限的差别(好多人在学习Spring Security ...
- mybatis源码学习(二)--mybatis+spring源码学习
这篇笔记主要来就,mybatis是如何利用spring的扩展点来实现和spring的整合 1.mybatis和spring整合之后,我们就不需要使用sqlSession.selectOne()这种方式 ...
- Spring 源码(10)Spring Bean 的创建过程(1)
Spring Bean的创建刚开始进行了一些准备工作,比如转换服务的初始化,占位符解析器的初始化,BeanDefinition元数据的冻结等操作,都是为了在创建Bean的过程中保证Bean的正确的创建 ...
- vue2.x核心源码深入浅出,我还是去看源码了
平常的工作就是以vue2.x进行开发,因为我是个实用主义者,以前我就一直觉得,你既然选择了这个框架开发你首先就要先弄懂这玩意怎么用,也就是先熟悉vue语法和各种api,而不是去纠结实现它的原理是什么. ...
- 从定时器的选型,到透过源码看XXL-Job(下)
透过源码看xxl-job (注:本文基于xxl-job最新版v2.0.2, quartz版本为 v2.3.1. 以下提到的调度中心均指xxl-job-admin项目) 上回说到,xxl-job是一个中 ...
- 追源索骥:透过源码看懂Flink核心框架的执行流程
li,ol.inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-bottom:20px}dt, ...
- 专治不会看源码的毛病--spring源码解析AOP篇
昨天有个大牛说我啰嗦,眼光比较细碎,看不到重点.太他爷爷的有道理了!要说看人品,还是女孩子强一些.原来记得看到一个男孩子的抱怨,说怎么两人刚刚开始在一起,女孩子在心里就已经和他过完了一辈子.哥哥们,不 ...
- Spring AOP源码解析——专治你不会看源码的坏毛病!
昨天有个大牛说我啰嗦,眼光比较细碎,看不到重点.太他爷爷的有道理了!要说看人品,还是女孩子强一些. 原来记得看到一个男孩子的抱怨,说怎么两人刚刚开始在一起,女孩子在心里就已经和他过完了一辈子.哥哥们, ...
- 曹工说Spring Boot源码(18)-- Spring AOP源码分析三部曲,终于快讲完了 (aop:config完整解析【下】)
写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...
- 通过源码理解Spring中@Scheduled的实现原理并且实现调度任务动态装载
前提 最近的新项目和数据同步相关,有定时调度的需求.之前一直有使用过Quartz.XXL-Job.Easy Scheduler等调度框架,后来越发觉得这些框架太重量级了,于是想到了Spring内置的S ...
随机推荐
- PostgreSQL:数据库迁移与版本控制
title: PostgreSQL:数据库迁移与版本控制 date: 2025/2/6 updated: 2025/2/6 author: cmdragon excerpt: 在现代软件开发中,数据库 ...
- LeetCode 第1题:两数之和
LeetCode 第1题:两数之和 题目描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以 ...
- Q:oracle表空间满了怎么办?
查询表空间使用率: --查看表空间使用率 SELECT a.tablespace_name as "TABLESPACE_NAME", DECODE(TRUNC(total),0, ...
- 基于Trae开发的自动表关联查询工具
对于复杂的一些业务,会涉及很多张表,其间有各种各样的关联关系,在开发&测试过程中,随时需要查看这些表中的数据状态,这种情况下需要我们写一些关联查询的SQL或者多条SQL执行来查看结果,个人感觉 ...
- 用 C# 插值字符串处理器写一个 sscanf
插值字符串处理器 C# 有一个特性叫做插值字符串,使用插值字符串,你可以自然地往字符串里面插入变量的值,比如:$"abc{x}def",这一改以往通过 string.Format ...
- 使用nvm管理node.js版本,方便vue2,vue3开发
在Vue项目开发过程中,我们常常会遇到同时维护Vue2和Vue3项目的情况.由于不同版本的Vue对Node.js 版本的要求有所差异,这就使得Node.js 版本管理成为了一个关键问题.NVM(Nod ...
- 正则表达式匹配邮箱,IP地址,URL
参考链接: http://urlregex.com/ 1. 邮箱匹配正则表达式 C# ^(?(")(".+?(?<!\\)"@)|(([0-9a-z]((\.(?! ...
- QT5笔记:34. 视口和窗口
 例子: void Widget::paintEvent(QP ...
- Azure Databricks - [02] 常用SQL
查看当前所在catalog:select current_catalog(); 创建catalog:create catalog if not exists harley_test; 创建表 crea ...
- JavaUtils - [04] 代码生成器(新)
题记部分 001 || 引入依赖 <!-- Code Generator --> <dependency> <groupId>com.baomidou</gr ...