Spring模块详解Ⅰ

news2025/2/6 3:53:22

目录

  • 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 {
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("Bean 初始化");
    }

    @Override
    public 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机制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2056559.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CentOS7设置默认免密登录用户root

CentOS7设置默认免密登录用户root 步骤1、打开要更改的 CentOS 系统2、切换到root用户2、reboot重启系统 步骤 1、打开要更改的 CentOS 系统 2、切换到root用户 2、reboot重启系统

前端(Vue)动态换肤的通用解决方案及原理分析(1)

动态换肤原理分析 比如此处将来会实现换肤功能&#xff0c;所以我们不能直接写死&#xff0c;而需要通过一个动态的值进行指定。 <el-menu:default-active"activeMenu":collapse"!$store.getters.sidebarOpened":background-color"$store.getters…

手机使用技巧:如何恢复Android手机不见的短信

在您的 Android 手机上丢失短信可能是一种令人沮丧的经历&#xff0c;尤其是在文本包含重要信息的情况下。幸运的是&#xff0c;有一些方法可以在Android上恢复已删除的短信。在这篇博文中&#xff0c;我们将讨论几种在Android手机上恢复已删除短信的方法。 为什么需要恢复Andr…

测绘程序设计|认识VS2017|VS2017新建项目|VS2017使用技巧

由于微信公众号改变了推送规则&#xff0c;为了每次新的推送可以在第一时间出现在您的订阅列表中&#xff0c;记得将本公众号设为星标或置顶喔~ 分享了如何使用VS2017新建项目、VS2017的项目结构以及一些使用技巧~ &#x1f33f;前言 Visual Studio作为微软旗下一款热门的编程…

C语言典型例题46

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 题目&#xff1a; 习题3.6 企业发放的奖金根据利润提成。利润I低于或等于100 000元的&#xff0c;奖金可提成10%&#xff1b; 利润高于100 000元&#xff0c;低于200000元&…

干货分享!渗透测试成功的8个关键

01 知道为什么要测试 执行渗透测试的目的是什么&#xff1f;是满足审计要求&#xff1f;是你需要知道某个新应用在现实世界中表现如何&#xff1f;你最近换了安全基础设施中某个重要组件而需要知道它是否有效&#xff1f;或者渗透测试根本就是作为你定期检查防御健康的一项例行…

2024年【电工(高级)】试题及解析及电工(高级)复审考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【电工&#xff08;高级&#xff09;】试题及解析及电工&#xff08;高级&#xff09;复审考试&#xff0c;包含电工&#xff08;高级&#xff09;试题及解析答案和解析及电工&#xff08;高级&#xff09;复审…

C语言——字符函数、字符串函数和内存函数

目录 1.字符分类函数 2.字符转换函数 3.字符串函数 3.1strlen 函数 3.1.1 strlen函数的模拟实现 3.1.1.1第一种方法&#xff1a;计算器方法 3.1.1.2 第二种方法&#xff1a;指针-指针 3.1.1.3 第三种方法&#xff1a;递归 3.2 strcpy 函数 3.2.1 strcpy函数的模拟实现…

成为Python砖家(4): 装饰器的简单理解

第一次理解 Python 中的装饰器&#xff08;decorator&#xff09;&#xff0c;是Python中一个非常强大的工具&#xff0c;它是一个返回函数的函数。 上面这个定义很简洁&#xff0c;但是没说清楚。 第二次理解 装饰器&#xff0c;是一个接收函数 func、返回封装后的函数 wr…

计算机Java项目|基于SpringBoot的农商对接系统的设计与实现

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验&#xff0c;被多个学校常年聘为校外企业导师&#xff0c;指导学生毕业设计并参…

基于Shader实现的UGUI描边解决方案遇到的bug

原文链接&#xff1a;https://www.cnblogs.com/GuyaWeiren/p/9665106.html 使用这边文章介绍的描边解决方案时遇到了一些问题&#xff0c;就是文字的描边经常会变粗&#xff0c;虽然有的时候也可以正常显示描边&#xff0c;但是运行一会儿描边就不正常了&#xff0c;而且不正常…

【数据分享】《新疆省统计年鉴》(2000-2022)

而今天要限时免费分享的数据就是2000-2022年间出版的《新疆省统计年鉴》并以多格式提供免费下载。&#xff08;无需分享朋友圈即可获取&#xff09; 数据介绍 《新疆省统计年鉴》是记录新疆维吾尔自治区历年来社会经济发展情况的重要资料汇编&#xff0c;涵盖了从2000年至…

海外仓物流的最后一步至关重要!电商的复购、好评全都要靠它!

在跨境电商物流链中&#xff0c;尾程派送是直接影响消费者购物体验的关键环节。作为物流流程的最后一步&#xff0c;尾程派送的效率和准确性关系到商品能否及时、安全地送达客户手中。这不仅关乎消费者的满意度&#xff0c;也关乎电商企业的品牌形象和市场竞争力。尤其是在依托…

睡眠质量不好该怎么调理

1、运动&#xff1a;睡前多做些小运动&#xff0c;但不要做太剧烈的运动&#xff0c;比如跑步、散步、打太极拳等&#xff0c;适当的运动有益于睡眠。   2、远离扰乱睡眠的食物&#xff1a;不要喝咖啡、茶和其他刺激性的重口味的东西。睡前最好喝一杯牛奶或温水&#xff0c;这…

字节序大小端

概述 1. MSB、LSB2. 最高有效字节、最低有效字节3. 大小端4. 如何判断本机大小端5. 大小端转换 1. MSB、LSB 以整数“157”为例 MSB &#xff1a;单个字节中的最高位 2^7 128 LSB &#xff1a;单个字节中的最低位 2^0 0 2. 最高有效字节、最低有效字节 以整形“0x0102030…

极速闪存启动:SD与SPI模式的智能初始化指南

最近很多客户朋友在询问我们 CS 创世 SD NAND 能不能使用 SPI 接口&#xff0c;两者使用起来有何区别&#xff0c;下面为大家详细解答。 SD MODE: CS 创世 SD NAND 支持 SD 模式和 SPI 模式&#xff0c;SD NAND 默认为 SD 模式&#xff0c;上电后&#xff0c;其初始化过程如下…

【MySQL】5.0 入门学习(五)——MySQL源码了解及MySQL初始化设置

1.0 MySQL源码目录主要包括&#xff1a;客户端代码、服务端代码、测试工具、其他库文件。当然&#xff0c;看懂源代码得有一定的C语言基础。 image image.gif ​ BUILD&#xff1a;各种平台的编译脚本&#xff0c;可以用来制作各平台的二进制版本 client&#xff1a;客户端目录…

推荐编译器插件:Fitten Code 更快更好的AI助手

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

【springboot】自定义starter

自定义一个starter&#xff0c;实现获取系统和程序信息。 0. 项目结构 org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件是用来加载自动配置类的&#xff0c;该文件必须放在META-INF/spring/目录下。 1. 创建项目 创建一个普通的maven项目&#xff0c;使…

在线翻译工具分享,这三款值得收藏

作为经常需要处理各种文件的人&#xff0c;我的英语又不是很好&#xff0c;但是文件中不乏需要翻译的英文PDF文件。在翻译工具的选择上&#xff0c;我尝试过不少&#xff0c;今天就来跟大家分享一下我使用过的三款工具翻译PDF文件时的体验感。 一、福昕翻译在线 网址&#xf…