[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 的实现}
}