看过源码吗?说下 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 ...
随机推荐
- 插入dp学习笔记
定义 插入 \(\text{dp}\) 适用于计数.求最优解且具有选择.排列元素过程等题目. 插入 \(\text{dp}\) 大致分为两类: 乱搞型:状态定义天马行空,但始终围绕着将新元素插入到旧元 ...
- 0425-字节输入流FileInputStream
package A10_IOStream; import java.io.FileInputStream; import java.io.IOException; /* java.io.InputSt ...
- flutter如何调试夜神模拟器
1.下载夜神模拟器 地址:https://www.yeshen.com/ 下载后直接傻瓜式安装即可 2. 将夜神模拟器设置为手机版本 打开夜神模拟器,点击点击右上角的设置: 然后选择 性能设置 然后 ...
- 第3章 在C#中创建类型
第3章 在C#中创建类型 3.1 类 复杂的类可能包含如下内容: 在 class 关键字之前:类特性(Attribute)和类修饰符.非嵌套的类修饰符有:public.internal.abs ...
- 天翼云完成首个国产化万卡训练,MFU达到国内领先水平!
天翼云自研国内首个单集群万卡国产化全功能预训练云服务平台发布上线,并完成万卡规模Llama3.1-405B大模型训练.Llama3.1-405B作为4000亿参数的模型,在息壤训推服务平台的支持下经过 ...
- .NET最佳实践:避免滥用Task.Run
在 C# 中,Task.Run 是用来在后台线程中执行异步任务的一个常见方法. 它非常适用于需要并行处理的场景,但如果不加以谨慎使用,可能会导致额外的线程池调度,进而影响程序的性能. 什么是线程池? ...
- server_patrol.sh服务器巡查脚本
server_patrol.sh #!/bin/bash #!/usr/bin/expect -f#! auther by wangxp #定义一个变量 LANG="zh_CN.UTF-8& ...
- 库卡KUKA机器人KRC2示教器维修常见方法
库卡KUKA机器人以稳定性而备受赞誉.作为其重要组成部分,KRC2示教器在机器人的编程.监控和调试过程中发挥着至关重要的作用.然而,就像其他任何电子设备一样,KRC2示教器在长期使用过程中也可能会遇到 ...
- Processing中获取表格数据( .tsv\.csv )的经验分享
在日常收集数据的需求中,会有很多场合用到表格数据类型,如.tsv和.csv,一来高效查看和编辑,二来数据条理清晰,导入数据结构方便.在Prcocessing中帮我预留好了loadTable().loa ...
- Flink学习(三) 批流版本的wordcount Scala版本
批处理代码: package com.wyh.wc import org.apache.flink.api.scala._ /** * 批处理代码 */ object WordCount { def ...