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

[3-02-01].第01章:框架概述 - Spring生态

SpringBoot学习大纲


一、Spring生态可以做的事情:

  • Spring 生态官网, Spring生态覆盖了:web开发、数据访问、安全控制、分布式、消息服务、移动开发、批处理、…
    在这里插入图片描述

二、部分功能介绍:

2.1.批处理(Batch Processing)

  • 1.批处理指:批量处理大量数据的任务,通常无需实时响应,而是按计划或触发条件执行(如每天凌晨处理订单对账)
  • 2.通过 Spring Batch 框架实现,提供了一套处理大规模数据任务的工具和模板
  • 3.核心功能:
    • 分块处理(Chunk Processing):将大数据分成小块处理(例如一次处理 100 条记录),避免内存溢出
    • 事务管理:确保每一步操作的事务性,失败时可回滚或重试
    • 任务调度:与 Spring Scheduler 或 Quartz 集成,定时触发任务
  • 4.典型场景:
    • 生成每日销售报表
    • 银行对账文件处理
    • 数据迁移(如从旧数据库迁移到新数据库)

2.2.事件驱动(Event-Driven)

  • 1.系统通过事件(Event) 触发行为,不同组件通过发布-订阅模式解耦,例如用户注册后发送邮件通知
  • 2.Spring 的实现:
    • 通过 Spring Events 机制(ApplicationEvent 和 ApplicationListener)或集成消息队列(如 RabbitMQ、Kafka)
  • 3.核心功能:
    • 发布-订阅模型:组件通过事件通信,降低耦合
    • 异步处理:结合 @Async 注解,提升性能
  • 4.典型场景:
    • 用户注册后发送验证邮件
    • 订单状态变更时通知其他服务
    • 微服务间的异步通信
  • 5.示例代码:
// 定义事件
public class OrderCreatedEvent extends ApplicationEvent {public OrderCreatedEvent(Order order) {super(order);}
}// 发布事件
@Service
public class OrderService {@Autowiredprivate ApplicationEventPublisher publisher;public void createOrder(Order order) {// 保存订单publisher.publishEvent(new OrderCreatedEvent(order));}
}// 监听事件
@Component
public class EmailService {@EventListenerpublic void handleOrderEvent(OrderCreatedEvent event) {// 发送邮件}
}

2.3.响应式编程(Reactive Programming)

  • 1.响应式编程:面向数据流和变化传播的编程范式,适用于高并发、低延迟的场景(如实时聊天、股票行情推送)
  • 2.Spring 的实现:通过 Spring WebFlux 和 Project Reactor 实现非阻塞、异步的响应式编程。
  • 3.核心功能:
    • 非阻塞 I/O:通过少量线程处理大量并发请求
    • 数据流处理:使用 Flux(0-N 个元素)和 Mono(0-1 个元素)处理流式数据
  • 4.典型场景:
    • 实时监控系统(如股票价格推送)
    • 高并发 API 服务(如社交网络动态加载)
    • 微服务间的异步通信(如使用 WebClient)

三、Spring5中的大升级:

3.1.内部源码设计

基于Java8的一些新特性,如:接口默认实现特性,可以重新设计源码架构

java8之前的设计方式:

  • C类和D类各需要接口A的部分方法,如果让它们直接实现A接口,就需要重写所有方法,所以在接口和类中间引入了一层适配器类,然后让C类和D类分别继承适配器,这样就可以避免重写所有方法了
    在这里插入图片描述

java8及之后的的设计方式:

  • java8开始有了默认实现,所以C和D类在实现接口A时,只需要重写需要的方法就可以,也不再需要适配器进行转换了
    在这里插入图片描述

3.2.接口默认实现举例:

a.什么是默认实现:

  • Java 8 引入的默认接口实现(Default Interface Methods)是接口中允许定义带有具体实现的方法的特性。它通过 default 关键字标记, 目的是解决接口的演化问题,允许在不破坏现有实现类的情况下扩展接口功能

b.语法形式:

public interface MyInterface {// 抽象方法(传统接口方法)void abstractMethod();// 默认方法(有具体实现)default void defaultMethod() {System.out.println("这是默认方法");}
}

c.关键特性

  • 1.默认方法可被覆盖:实现类可以直接使用默认方法,也可以选择覆盖它
public class MyClass implements MyInterface {@Overridepublic void abstractMethod() {System.out.println("实现抽象方法");}@Overridepublic void defaultMethod() {System.out.println("覆盖默认方法");}
}
  • 2.多接口冲突解决:如果一个类实现了多个接口,且这些接口有同名的默认方法,必须手动解决冲突:
public interface InterfaceA {default void foo() { System.out.println("InterfaceA"); }
}public interface InterfaceB {default void foo() { System.out.println("InterfaceB"); }
}public class MyClass implements InterfaceA, InterfaceB {// 必须覆盖 foo() 解决冲突@Overridepublic void foo() {InterfaceA.super.foo(); // 显式调用 InterfaceA 的实现}
}

http://www.dtcms.com/a/286471.html

相关文章:

  • 表单、表格字段,输入完毕后立即点击【保存】,导致数据未更新就被保存
  • 【教程】基于无人机的大豆光合效率研究
  • 赛思SLIC芯片、语音芯片原厂 赛思SLIC语音芯片ASX630:国产强“芯”赋能FTTR全光网络​
  • vscode 一直连不上远程,网络是通的,ssh 也能直接登录远程
  • 【科研绘图系列】R语言绘制分组箱线图
  • SDC Specical check setting的描述 - false path
  • Docker笔记-部署Redis集群
  • leetcode15.三数之和题解:逻辑清晰带你分析
  • AWS(基础)
  • 网络基础10 :ACL真机实验
  • Redis原理之哨兵机制(Sentinel)
  • 【洛谷P1417】烹调方案 题解
  • ONNX模型使用指南:从零开始掌握跨领域模型部署
  • 图片平铺下去总是有个缝隙的解决方案
  • 塞舌尔公司的查册报告Certificate of Official Search是什么?有什么信息
  • 瀚高数据库开启Oracle兼容模块
  • vue2 面试题及详细答案150道(101 - 120)
  • ubuntu20.04使用unity3d做机器人仿真环境搭建
  • Python单例模式详解:从原理到实战的完整指南
  • 详解Linux(Ubuntu/RedHat/CentOS)及国产服务器统一加域管理方案
  • GoC 上册课程
  • java+vue+SpringBoot集团门户网站(程序+数据库+报告+部署教程+答辩指导)
  • docker--程序自启动
  • HIMA X-DO3201模块的冗余配置方法
  • Python Pandas 实践学习笔记(1)
  • Chainlit + FasiAPI+ LlamaIndex 实现RAG(一)
  • 深入解析:短连接 vs 长连接 vs 短轮询 vs 长轮询
  • keil5使用技巧----keil-build-viewer.exe插件使用
  • 前端性能优化“核武器”:新一代图片格式(AVIF/WebP)与自动化优化流程实战
  • Ubuntu查看Docker容器