当前位置: 首页 > 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.lryc.cn/news/592499.html

相关文章:

  • QT窗口(4)-浮动窗口
  • 如何阅读Spring源码
  • JavaSE -- 数据操作流
  • 亚马逊广告高级玩法:如何通过ASIN广告打击竞品流量?
  • 利用steps()分步实现奔跑的小熊案例
  • IDEA 中 Maven 配置:当前项目与新项目的统一设置方法
  • 基于单片机金沙河粮仓环境监测系统设计与实现
  • STM32之L298N电机驱动模块
  • Maven 配置文件核心配置:本地仓库、镜像与 JDK 版本
  • JVM常用运行时参数说明
  • sizeof和strlen的区别
  • 【AI News | 20250717】每日AI进展
  • 通信算法之294:LTE系统中的整数倍频偏估计
  • 【数据结构初阶】--双向链表(一)
  • 【Python】python 爬取某站视频批量下载
  • stack and queue 之牛刀小试
  • SymAgent(神经符号自学习Agent)
  • 实习十三——传输层协议
  • 多级反馈队列
  • JS获取 CSS 中定义var变量值
  • 路由的概述
  • 饿了么app 抓包 hook
  • three初体验
  • 【基座模型】Qwen3报告总结
  • OpenTelemetry学习笔记(四):OpenTelemetry 语义约定,即字段映射(1)
  • 二、Dify 版本升级教程(LInux-openeuler)
  • 软件维护全维度解析:从修复到进化的生命周期管理
  • linux制作镜像、压缩镜像、烧录的方法
  • iOS 数据持久化
  • iOS 文件深度调试实战 查看用户文件 App 沙盒 系统文件与日志全指南