看过源码吗?说下 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 ...
随机推荐
- SpringBoot启动源码分析
- T480指纹识别支持
目标 通过指纹识别解锁slim-lock 环境 操作系统archlinux 桌面管理器slim 锁屏slimlock 硬件 Thinkpad T480 注: 指纹设备id, 06cb:009a 安装 ...
- 数据存储“取经路”,HBlock轻松“渡”!
近日,天翼云联合权威科技媒体InfoQ举办了以"新存储,更轻量"为主题的线上技术分享会.天翼云存储产品线总监武志民讲解了HBlock的创新设计和技术. 高性能·高可用·高可靠 自研 ...
- 以数字守护汉字!天翼云TeleDB数据库获GB 18030最高级别认证!
近日,由工信部电子工业标准化研究院主办的GB 18030<信息技术 中文编码字符集>应用推广大会暨"汉字守护计划"成果发布会召开,工信部信发司.中央网信办信息化局.教育 ...
- linux--安装wine模拟器,可用作安装Windows的exe程序
sudo add-apt-repository ppa:ubuntu-wine/ppa sudo apt-get update sudo apt-get install wine1.7 安装完以后可以 ...
- Linux使用堡垒机
一.linux系统使用 1. 安装 puttygen sudo apt-get install putty 2. 进入 pem 所在文件执行转换命令 puttygen mykey.pem -o myk ...
- @Scheduled参数及cron表达式解释
@Scheduled支持以下8个参数:1.cron:表达式,指定任务在特定时间执行:2.fixedDelay:表示上一次任务执行完成后多久再次执行,参数类型为long,单位ms:3.fixedDela ...
- CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
CSnakes 是一个用于在.NET项目中嵌入Python代码的工具,由.NET源生成器和运行时组成,能够实现高效的跨语言调用,Github:https://github.com/tonybalone ...
- typecho引入五秒盾,缓解服务器压力
功能是:对访客的访问频率会先一步判断,根据用户自定义的范围,将频率过高的访客跳转向127.0.0.1,而没有达到频率的访客则会进行cookies验证,这样更大程序的对恶意流量攻击进行拦截,并且有效缓解 ...
- C/C++跨平台开发1-windows和linux中的类库
基本概念: 什么是库: 在windows平台和linux平台下都大量存在着库. 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 静态库:在程序链接的时候使用,链接器会将程序中使 ...