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是一款云原生向量…...

龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...

css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...

学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...