当前位置: 首页 > news >正文

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管理。主要包括以下几个阶段:

  1. Bean定义加载:容器根据配置文件或注解加载Bean定义。
  2. Bean实例化:容器根据Bean定义实例化Bean。
  3. 依赖注入:容器通过构造器或Setter方法将依赖注入到Bean中。
  4. 初始化:如果Bean实现了InitializingBean接口或配置了init-method,Spring会调用初始化方法。
  5. 使用:应用程序可以通过容器获得Bean并使用它们。
  6. 销毁:当容器关闭时,如果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&#xff08;核心容器&#xff09;2. Data Access/Integration&#xff08;数据访问与集成&#xff09;3. Web4. AOP (Aspect-Oriented Programming&#xff0c;面向切面编程)5. Instrumentation&#xff08;工具集&#…...

C语言程序设计-练习篇

山海自有归期&#xff0c;风雨自有相逢。 一 下面代码的结果是什么&#xff1f; int main() { int i 0; for (i 0; i < 10; i) { if (i 5) //此处为赋值&#xff0c;i 5表达式结果为5 printf("%d ", i); //表达式为真&a…...

【Oracle篇】统计信息和动态采样的深度剖析(第一篇,总共六篇)

&#x1f4ab;《博主介绍》&#xff1a;✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ &#x1f4ab;《擅长领域》&#xff1a;✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux&#xff0c;也在扩展大数据方向的知识面✌️…...

无源互调自动化测试软件应用案例分享:S参数和互调的高效测试

随着产品种类的丰富和市场需求的变化&#xff0c;合肥某电子技术公司意识到&#xff0c;传统的手工测试已无法满足公司持续发展的需要。于是&#xff0c;一场自动化测试转型悄然展开。 一、背景介绍 合肥某电子技术公司成立于2009年&#xff0c;专注于功分器、耦合器、负载器、…...

【6大设计原则】精通设计模式之里氏代换原则:从理论到实践,掌握代码演化的黄金法则

一、引言 1.1 设计模式的必要性 在软件开发的复杂性面前&#xff0c;设计模式提供了一套成熟的解决方案&#xff0c;它们是经过多年实践总结出来的&#xff0c;能够帮助我们应对各种编程难题。设计模式不仅仅是一种编程技巧&#xff0c;更是一种编程哲学&#xff0c;它能够提…...

国内服务器安装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是以扩张速度最快而闻名的咖啡连锁店。如果你在街角看到它的店&#xff0c;在对面街上肯定还会看到另一家。因为扩张速度实在太快了&#xff0c;他们准备更新订单系统&#xff0c;以合乎他们的饮料供应要求。他们原先的类设计是这样的…… 购买咖啡时&am…...

大白话解释TCP的三次握手和四次挥手

你好&#xff0c;我是沐爸&#xff0c;欢迎点赞、收藏和关注。个人知乎 TCP的三次握手是浏览器与服务器建立连接的过程&#xff0c;而四次挥手&#xff0c;是两者断开连接的过程。今天把客户端和服务端当做两个人&#xff0c;通过打电话的方式解释连接建立和断开的过程。 TCP…...

asyncua模块实现OPC UA通讯

asyncua是OPCUA的python实现&#xff0c;使用起来非常方便&#xff0c;其github地址是https://github.com/FreeOpcUa/opcua-asyncio UaExpert是OPC UA Client的GUI工具&#xff0c;当编写好server代码后并运行&#xff0c;我们可以使用UaExpert去和server进行通信。UaExpert使…...

RabbitMQ的核心概念

RabbitMQ是一个消息中间件&#xff0c;也是一个生产者消费者模型&#xff0c;负责接收&#xff0c;存储和转发消息。 核心概念 Producer 生产者&#xff0c;是RabbitMQ Server的客户端&#xff0c;向RabbitMQ发送消息。 Consumer 消费者&#xff0c;是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 关键字用于声明一个全局变量或对象&#xff0c;而不定义它。这意味着 _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): 游戏逻辑

第五章 游戏逻辑 在本章中&#xff0c;我们将探讨游戏开发中的核心逻辑&#xff0c;包括碰撞检测、分数系统和游戏状态管理。这些元素不仅是游戏功能的关键&#xff0c;还能显著提升游戏的趣味性和挑战性。 5.1 碰撞检测 碰撞检测是游戏开发中的一个重要方面&#xff0c;它用…...

嵌入式系统实时任务调度算法优化与实现

嵌入式系统实时任务调度算法优化与实现 目录 嵌入式系统实时任务调度算法优化与实现 引言 1.1 嵌入式系统的重要性 1.2 实时任务调度的重要性 实时任务的定义与分类 2.1 实时任务的定义 2.2 实时任务的分类 2.3 实时任务的其他分类方法 硬实时与软实时系统 3.1 硬实…...

Java:枚举转换

在Java中&#xff0c;你可以使用Enum.valueOf()方法将字符串转换为枚举常量。但是&#xff0c;如果你想要将枚举转换为其他类型&#xff0c;你需要自定义转换方法。以下是一个简单的例子&#xff0c;演示如何将枚举转换为整数&#xff1a; public enum Color {RED(1), GREEN(2…...

Vue、react父子组件生命周期

Vue 的父子组件生命周期 以下分为三部分&#xff0c;加载渲染阶段——更新阶段——销毁阶段&#xff0c;我们来一一介绍&#xff1a; 1、加载渲染阶段 在加载渲染阶段&#xff0c;一定得等子组件挂载完毕后&#xff0c;父组件才能挂载完毕&#xff0c;所以父组件的 mounted 在…...

HTML 基础要素解析

目录 HTML 初步认识 纯文本文件介绍 纯文本文件与其它文件的区别 Html介绍 HTML 骨架 文档类型&#xff08;!DOCTYPE&#xff09;声明 介绍 常用的 DOCTYPE 声明 meta标签 字符集 关键字和页面描述 HTML 初步认识 纯文本文件介绍 纯文本文件指的是仅包含文本内容&am…...

开源的向量数据库Milvus

Milvus是一款开源的向量数据库&#xff0c;专为处理向量搜索任务而设计&#xff0c;尤其擅长处理大规模向量数据的相似度检索。 官网地址&#xff1a;https://milvus.io/ 以下是关于Milvus的详细介绍&#xff1a; 一、基本概念 向量数据库&#xff1a;Milvus是一款云原生向量…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​&#xff1a; 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​&#xff1a; // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

WPF八大法则:告别模态窗口卡顿

⚙️ 核心问题&#xff1a;阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程&#xff0c;导致后续逻辑无法执行&#xff1a; var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题&#xff1a…...

AD学习(3)

1 PCB封装元素组成及简单的PCB封装创建 封装的组成部分&#xff1a; &#xff08;1&#xff09;PCB焊盘&#xff1a;表层的铜 &#xff0c;top层的铜 &#xff08;2&#xff09;管脚序号&#xff1a;用来关联原理图中的管脚的序号&#xff0c;原理图的序号需要和PCB封装一一…...

【实施指南】Android客户端HTTPS双向认证实施指南

&#x1f510; 一、所需准备材料 证书文件&#xff08;6类核心文件&#xff09; 类型 格式 作用 Android端要求 CA根证书 .crt/.pem 验证服务器/客户端证书合法性 需预置到Android信任库 服务器证书 .crt 服务器身份证明 客户端需持有以验证服务器 客户端证书 .crt 客户端身份…...

CSS3相关知识点

CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...

链式法则中 复合函数的推导路径 多变量“信息传递路径”

非常好&#xff0c;我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题&#xff0c;统一使用 二重复合函数&#xff1a; z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y))​ 来全面说明。我们会展示其全微分形式&#xff08;偏导…...