Spring模块详解Ⅰ
目录
- Spring
- Spring框架的主要功能模块
- 1. Core Container(核心容器)
- 2. Data Access/Integration(数据访问与集成)
- 3. Web
- 4. AOP (Aspect-Oriented Programming,面向切面编程)
- 5. Instrumentation(工具集)
- 6. Messaging(消息传递)
- 7. Testing(测试)
- 8. Cloud
- 9. Security
- 10. Batch Processing
- 11. Integration
- 12. Reactive Programming(响应式编程)
- 13. Scheduling and Task Execution
- 14. Miscellaneous(其他)
- 结论
- Spring Core
- 核心组件及功能
- 1. Inversion of Control (IoC) 和 Dependency Injection (DI)
- loC(控制反转)
- DI(依赖注入)
- 例子:
- 2. BeanFactory 和 ApplicationContext
- BeanFactory
- ApplicationContext
- 3. Bean的生命周期
- 示例:
- 4. Spring Bean的作用域
- 配置例子:
- 5. Spring Expression Language (SpEL)
- 例子:
- 6. 资源访问(Resource)
- 例子:
- 7. 国际化(Internationalization, i18n)
- 例子:
- 总结
Spring
Spring框架是一个广泛使用的开源Java平台,它提供了全面的编程和配置模型,用于现代Java基础设施。Spring的模块化设计允许开发者根据需要选择和使用特定的模块,而无需引入整个框架。

Spring框架的主要功能模块
1. Core Container(核心容器)
- Spring Core:核心容器模块提供了框架的基本功能,例如依赖注入(Dependency Injection,DI)和控制反转(Inversion of Control,IoC)。
- Spring Beans:用于管理Bean的创建、配置和生命周期。所有的Bean都由Spring IoC容器管理。
- Spring Context:提供访问应用程序上下文的功能,类似于BeanFactory但提供了更多的企业级功能,如国际化、事件传播等。
- Spring Expression Language (SpEL):允许在配置文件中使用表达式语言,用于动态查询和配置。
2. Data Access/Integration(数据访问与集成)
- Spring JDBC:提供了对JDBC的简化操作,封装了大量冗余代码,简化数据库操作。
- Spring ORM:与各种ORM框架(如Hibernate、JPA、MyBatis)集成,帮助处理数据访问逻辑。
- Spring Transaction:支持声明式事务管理,能够管理资源的事务,像JDBC、Hibernate和JPA的事务管理。
- Spring DAO(Data Access Object):为数据访问层提供了抽象,简化了与数据库交互的代码。
3. Web
- Spring Web:提供了与Web相关的功能,包括基于Servlet的开发。它支持传统的Spring MVC架构。
- Spring WebFlux:这是一个用于非阻塞、反应式编程的模块,支持响应式(Reactive)流的Web应用开发。
- Spring MVC:支持创建MVC架构的Web应用程序,允许控制器、视图和模型的分离。
- Spring WebSocket:提供WebSocket通信的支持,允许全双工、实时通信。

4. AOP (Aspect-Oriented Programming,面向切面编程)
- Spring AOP:提供面向切面编程的支持。AOP允许在不修改源代码的情况下,向已有代码中加入新的行为,比如日志记录、事务管理、权限控制等。
- Spring Aspects:结合AspectJ的实现,可以在Spring中使用完整的AOP功能。
5. Instrumentation(工具集)
- Spring Instrumentation:提供了类加载器和代理的工具,主要用于在JVM级别增强类功能的工具集,常用于应用服务器的性能监控和代理增强。
6. Messaging(消息传递)
- Spring JMS (Java Message Service):提供与JMS(Java消息服务)的集成,允许应用程序之间的异步消息传递。
- Spring AMQP:提供与AMQP(Advanced Message Queuing Protocol,常见的实现如RabbitMQ)的集成。
- Spring Kafka:提供与Apache Kafka的集成,用于高吞吐量的消息队列处理。
- Spring WebSockets:支持WebSocket协议的消息传输,适用于实时通信应用。
7. Testing(测试)
- Spring Test:为Spring应用程序提供了对单元测试和集成测试的支持。它包括对JUnit、TestNG等测试框架的集成,可以轻松地在测试环境中模拟和注入Bean。

8. Cloud
- Spring Cloud:提供用于构建分布式系统的工具集,如微服务架构中的服务发现、配置管理、断路器、分布式追踪、API网关、负载均衡、事件总线等。
- Spring Cloud Stream:用于构建消息驱动的微服务应用,支持Kafka、RabbitMQ等消息系统。
9. Security
- Spring Security:提供了全面的认证和授权功能,用于保护Spring应用程序,支持OAuth、JWT、LDAP、SAML等多种安全协议和机制。
- Spring Session:用于管理用户会话的持久化机制,支持跨多个服务器共享会话数据。
10. Batch Processing
- Spring Batch:用于大规模批量数据处理,支持事务管理、统计、重试、跳过和资源管理等复杂批处理任务。
11. Integration
- Spring Integration:为企业集成模式(EIP)提供支持,允许在不同系统间传输和转换消息。
- Spring HATEOAS:提供Hypermedia作为REST应用程序的扩展,实现更符合REST规范的API。
- Spring RSocket:用于支持RSocket协议的应用,适合用于需要低延迟、高吞吐量的双向通信。
12. Reactive Programming(响应式编程)
- Spring WebFlux:响应式非阻塞Web框架,基于Reactor,适用于高并发和实时处理应用程序。
- Spring Reactor:响应式流的核心库,提供Flux和Mono作为响应式编程的基础。

13. Scheduling and Task Execution
- Spring Task:提供任务调度和异步方法执行的支持。可以使用
@Scheduled注解来创建定时任务,或者通过TaskExecutor执行异步任务。
14. Miscellaneous(其他)
- Spring Cache:为缓存管理提供抽象,支持多种缓存提供者如EhCache、Hazelcast、Redis等。
- Spring Social:支持与社交媒体平台的集成(如Facebook、Twitter等)。
- Spring State Machine:提供一个灵活的状态机实现,适合复杂的状态转换场景。
结论
Spring框架通过这些模块,提供了从核心容器、Web开发、数据访问、安全性到分布式系统、响应式编程、批处理等几乎所有企业级开发所需的功能。开发者可以根据项目需求,灵活地选择和组合模块,从而简化开发工作、提高生产效率。Spring模块化的设计使其具有极高的可扩展性和适应性,广泛应用于各类Java应用程序开发中。

Spring Core
Spring Core模块是Spring框架的核心基础,它提供了整个Spring体系的核心功能,并为其他模块提供依赖注入和控制反转(IoC)容器的支持。Spring Core模块是开发者与Spring框架互动的第一步,也是最基本的模块,它包含了IoC、依赖注入、Bean管理、上下文管理、资源访问、国际化等重要功能。
核心组件及功能
1. Inversion of Control (IoC) 和 Dependency Injection (DI)
loC(控制反转)
控制反转(Inversion of Control, IoC)是Spring框架的基础概念之一。它将对象创建和管理的责任从应用代码转移到Spring容器中。通常,我们在程序中会手动创建和管理对象(如用new关键字创建对象),而在Spring中,IoC容器会接管这些任务。
DI(依赖注入)
依赖注入(Dependency Injection, DI)是实现控制反转的一种方式。它通过将对象的依赖关系注入到对象中来解决对象的依赖性。例如,如果对象A依赖于对象B,Spring容器会自动将对象B注入到对象A中,而无需开发者手动设置它们的关系。
Spring支持两种主要的依赖注入方式:
- 构造器注入(Constructor Injection):通过构造函数传递依赖对象。
- Setter注入(Setter Injection):通过设置方法(Setter)传递依赖对象。
例子:
// Service类
public class UserService {private UserRepository userRepository;// 使用构造器注入public UserService(UserRepository userRepository) {this.userRepository = userRepository;}// 或者使用Setter注入public void setUserRepository(UserRepository userRepository) {this.userRepository = userRepository;}
}

2. BeanFactory 和 ApplicationContext
BeanFactory
BeanFactory是Spring IoC容器的核心接口,它是最基础的容器,负责管理Spring应用中的Bean。BeanFactory通过配置文件或注解了解对象之间的依赖关系,并根据需求来创建和管理这些Bean。常见的实现有XmlBeanFactory,不过在现代Spring应用中通常不直接使用这个接口。
ApplicationContext
ApplicationContext是BeanFactory的扩展,它不仅管理Bean,还提供企业级应用的特性,例如:
- 国际化:通过
MessageSource接口支持国际化消息。 - 事件传播:允许发布和监听事件。
- 资源访问:通过统一的资源文件接口访问资源(如文件、URL等)。
- 自动装配:ApplicationContext通过自动装配的方式管理Bean的生命周期和依赖关系。
ApplicationContext的常见实现:
- ClassPathXmlApplicationContext:从类路径加载XML配置文件的上下文。
- FileSystemXmlApplicationContext:从文件系统加载XML配置文件的上下文。
- AnnotationConfigApplicationContext:基于注解的配置上下文。
3. Bean的生命周期
在Spring容器中,Bean的生命周期由Spring管理。主要包括以下几个阶段:
- Bean定义加载:容器根据配置文件或注解加载Bean定义。
- Bean实例化:容器根据Bean定义实例化Bean。
- 依赖注入:容器通过构造器或Setter方法将依赖注入到Bean中。
- 初始化:如果Bean实现了
InitializingBean接口或配置了init-method,Spring会调用初始化方法。 - 使用:应用程序可以通过容器获得Bean并使用它们。
- 销毁:当容器关闭时,如果Bean实现了
DisposableBean接口或配置了destroy-method,Spring会调用销毁方法。
示例:
@Component
public class MyBean implements InitializingBean, DisposableBean {@Overridepublic void afterPropertiesSet() throws Exception {System.out.println("Bean 初始化");}@Overridepublic void destroy() throws Exception {System.out.println("Bean 销毁");}
}

4. Spring Bean的作用域
Spring支持不同的Bean作用域(Scope)来管理Bean的生命周期。常见的作用域包括:
- singleton(默认):容器中只创建一个单实例Bean,并对所有请求提供同一实例。
- prototype:每次请求都会创建一个新的Bean实例。
- request:为每个HTTP请求创建一个新的Bean实例(仅适用于Web应用)。
- session:为每个HTTP会话创建一个新的Bean实例(仅适用于Web应用)。
- application:为整个ServletContext创建一个Bean实例(仅适用于Web应用)。
配置例子:
<bean id="myBean" class="com.example.MyBean" scope="prototype"/>
5. Spring Expression Language (SpEL)
SpEL是Spring提供的一种表达式语言,用于在配置中动态查询和操作对象的属性、方法和Bean。例如,SpEL可以在配置文件中进行计算、调用方法或访问集合等。
例子:
<bean id="myBean" class="com.example.MyBean"><property name="name" value="#{systemProperties['user.name']}" />
</bean>
6. 资源访问(Resource)
Spring的资源抽象(Resource接口)提供了一种统一的方式来访问各种资源类型,如文件、URL、classpath资源等。Spring通过ResourceLoader自动加载这些资源,方便开发者进行操作。
例子:
Resource resource = applicationContext.getResource("classpath:data.txt");
InputStream inputStream = resource.getInputStream();

7. 国际化(Internationalization, i18n)
Spring的国际化支持允许开发者轻松实现应用程序的多语言支持。通过MessageSource接口,开发者可以配置不同的语言资源,并根据用户的区域设置信息自动加载相应的资源文件。
例子:
MessageSource messageSource = applicationContext.getBean(MessageSource.class);
String message = messageSource.getMessage("greeting", null, Locale.US);
总结
Spring Core模块是Spring框架的基础,它通过控制反转(IoC)和依赖注入(DI)为应用程序提供了灵活的对象管理方式。Spring Core模块的其他功能如Bean管理、生命周期、作用域、资源访问和国际化等,极大地简化了开发工作,提升了开发效率,使得企业级Java应用程序开发更加灵活和易维护。
这个模块构建了Spring框架的基础,所有其他高级模块和功能(如数据访问、Web开发、AOP、事务管理等)都依赖于Spring Core模块的IoC和DI机制。
相关文章:
Spring模块详解Ⅰ
目录 SpringSpring框架的主要功能模块1. Core Container(核心容器)2. Data Access/Integration(数据访问与集成)3. Web4. AOP (Aspect-Oriented Programming,面向切面编程)5. Instrumentation(工具集&#…...
C语言程序设计-练习篇
山海自有归期,风雨自有相逢。 一 下面代码的结果是什么? int main() { int i 0; for (i 0; i < 10; i) { if (i 5) //此处为赋值,i 5表达式结果为5 printf("%d ", i); //表达式为真&a…...
【Oracle篇】统计信息和动态采样的深度剖析(第一篇,总共六篇)
💫《博主介绍》:✨又是一天没白过,我是奈斯,DBA一名✨ 💫《擅长领域》:✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux,也在扩展大数据方向的知识面✌️…...
无源互调自动化测试软件应用案例分享:S参数和互调的高效测试
随着产品种类的丰富和市场需求的变化,合肥某电子技术公司意识到,传统的手工测试已无法满足公司持续发展的需要。于是,一场自动化测试转型悄然展开。 一、背景介绍 合肥某电子技术公司成立于2009年,专注于功分器、耦合器、负载器、…...
【6大设计原则】精通设计模式之里氏代换原则:从理论到实践,掌握代码演化的黄金法则
一、引言 1.1 设计模式的必要性 在软件开发的复杂性面前,设计模式提供了一套成熟的解决方案,它们是经过多年实践总结出来的,能够帮助我们应对各种编程难题。设计模式不仅仅是一种编程技巧,更是一种编程哲学,它能够提…...
国内服务器安装Docker提示Failed to connect to download.docker.com port 443的解决方案
解决方案 换国内镜像源。我用的是清华的。https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ 自己找自己对应的版本。 例如你的Ubuntu系统。就用下列命令 sudo curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu/gpg -o /etc/apt/keyrings/do…...
前端开发攻略---彻底弄懂跨域解决方案
目录 1、浏览器的同源策略 1.1 源 1.2 同源与非同源 1.3 同源请求与非同源请求 2、跨域受到的限制 3、注意点 4、CORS解决Ajax跨域问题 4.1 CORS概述 4.2 CORS解决简单请求跨域 4.3 简单请求与复杂请求 4.4 CORS解决复杂请求跨域 4.5 借助CORS库快速完成配置 5、JS…...
【HeadFirst 设计模式】装饰者模式的C++实现
一、案例背景 Starbuzz是以扩张速度最快而闻名的咖啡连锁店。如果你在街角看到它的店,在对面街上肯定还会看到另一家。因为扩张速度实在太快了,他们准备更新订单系统,以合乎他们的饮料供应要求。他们原先的类设计是这样的…… 购买咖啡时&am…...
大白话解释TCP的三次握手和四次挥手
你好,我是沐爸,欢迎点赞、收藏和关注。个人知乎 TCP的三次握手是浏览器与服务器建立连接的过程,而四次挥手,是两者断开连接的过程。今天把客户端和服务端当做两个人,通过打电话的方式解释连接建立和断开的过程。 TCP…...
asyncua模块实现OPC UA通讯
asyncua是OPCUA的python实现,使用起来非常方便,其github地址是https://github.com/FreeOpcUa/opcua-asyncio UaExpert是OPC UA Client的GUI工具,当编写好server代码后并运行,我们可以使用UaExpert去和server进行通信。UaExpert使…...
RabbitMQ的核心概念
RabbitMQ是一个消息中间件,也是一个生产者消费者模型,负责接收,存储和转发消息。 核心概念 Producer 生产者,是RabbitMQ Server的客户端,向RabbitMQ发送消息。 Consumer 消费者,是RabbitMQ Server的客…...
【vSphere 7/8】深入浅出 vSphere 证书 Ⅰ—— 初识和了解 vSphere证书
目录 摘要1. vSphere 安全证书1.1 vSphere 安全证书的类型和有效期 2. 在 vSphere Client 中初识 vSphere 证书2.1 vCenter 8.0.3 的 vSphere Client 界面2.2 vCenter Server 7.0 Update2 到 vCenter Server 8.0 Update 2 的 vSphere Client 界面2.3 vCenter Server 7.0 到 vCe…...
【云备份】服务端模块-热点管理
文章目录 0.回顾extern1.介绍2.实现思想3.代码测试代码 热点管理总结 0.回顾extern extern cloudBackup::DataManager *_dataManager extern 关键字用于声明一个全局变量或对象,而不定义它。这意味着 _dataManager 是一个指向 cloudBackup::DataManager 类型的指针…...
call apply bind特性及手动实现
call // 原生的call var foo { value: 1 };function bar(...args) {console.log("this", this.value, args); }bar.call(foo)// call 改变了bar的this指向 // bar函数执行了 // 等价于 // var foo { // name: "tengzhu", // sex: "man", …...
pygame开发课程系列(5): 游戏逻辑
第五章 游戏逻辑 在本章中,我们将探讨游戏开发中的核心逻辑,包括碰撞检测、分数系统和游戏状态管理。这些元素不仅是游戏功能的关键,还能显著提升游戏的趣味性和挑战性。 5.1 碰撞检测 碰撞检测是游戏开发中的一个重要方面,它用…...
嵌入式系统实时任务调度算法优化与实现
嵌入式系统实时任务调度算法优化与实现 目录 嵌入式系统实时任务调度算法优化与实现 引言 1.1 嵌入式系统的重要性 1.2 实时任务调度的重要性 实时任务的定义与分类 2.1 实时任务的定义 2.2 实时任务的分类 2.3 实时任务的其他分类方法 硬实时与软实时系统 3.1 硬实…...
Java:枚举转换
在Java中,你可以使用Enum.valueOf()方法将字符串转换为枚举常量。但是,如果你想要将枚举转换为其他类型,你需要自定义转换方法。以下是一个简单的例子,演示如何将枚举转换为整数: public enum Color {RED(1), GREEN(2…...
Vue、react父子组件生命周期
Vue 的父子组件生命周期 以下分为三部分,加载渲染阶段——更新阶段——销毁阶段,我们来一一介绍: 1、加载渲染阶段 在加载渲染阶段,一定得等子组件挂载完毕后,父组件才能挂载完毕,所以父组件的 mounted 在…...
HTML 基础要素解析
目录 HTML 初步认识 纯文本文件介绍 纯文本文件与其它文件的区别 Html介绍 HTML 骨架 文档类型(!DOCTYPE)声明 介绍 常用的 DOCTYPE 声明 meta标签 字符集 关键字和页面描述 HTML 初步认识 纯文本文件介绍 纯文本文件指的是仅包含文本内容&am…...
开源的向量数据库Milvus
Milvus是一款开源的向量数据库,专为处理向量搜索任务而设计,尤其擅长处理大规模向量数据的相似度检索。 官网地址:https://milvus.io/ 以下是关于Milvus的详细介绍: 一、基本概念 向量数据库:Milvus是一款云原生向量…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...
处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
LabVIEW双光子成像系统技术
双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...
MySQL 主从同步异常处理
阅读原文:https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主,遇到的这个错误: Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一,通常表示ÿ…...
ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]
报错信息:libc.so.6: cannot open shared object file: No such file or directory: #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...
