Spring、Spring Boot、Spring Cloud三者有何本质区别?

摘要:要搞懂 Spring、Spring Boot、Spring Cloud 的原理,核心是先理清它们各自的定位和解决的问题,再从「核心设计思想」和「底层实现逻辑」两个维度拆解。三者是递进关系:Spring 是基础框架,Spring Boot 简
要搞懂 Spring、Spring Boot、Spring Cloud 的原理,核心是先理清它们各自的定位和解决的问题,再从「核心设计思想」和「底层实现逻辑」两个维度拆解。三者是递进关系:Spring 是基础框架,Spring Boot 简化 Spring 开发,Spring Cloud 基于前两者实现微服务治理。 一、Spring 核心原理 Spring 是 Java 开发的「一站式轻量级框架」,核心目标是解耦(降低代码间的依赖)和简化企业级开发。 1. 核心思想:IoC + AOP 这是 Spring 的两大基石,理解它们就抓住了 Spring 的本质。 (1) IoC(控制反转):把创建对象的权力交给框架 问题背景:传统开发中,程序员手动 new 对象(比如 UserService service = new UserServiceImpl()),对象间耦合度极高,修改一个类可能要改一堆依赖它的类。 核心逻辑: IoC 容器(Spring 核心)接管对象的创建、初始化、依赖注入、销毁等生命周期。 程序员只需要定义「对象需要什么」,而不用关心「对象怎么创建」。 实现方式: DI(依赖注入):IoC 的具体落地方式,通过构造器、setter 方法、注解(@Autowired)将依赖对象注入到目标对象中。 IoC 容器实现:核心是 BeanFactory(基础接口)和 ApplicationContext(增强版,日常开发用这个),容器启动时扫描配置(XML/注解),将对象(Spring 中称为 Bean)实例化并放入容器,后续按需获取。 简单示例(IoC/DI): // 1. 定义Bean @Service public class UserService { // 依赖注入:无需手动new UserDao,Spring容器自动注入 @Autowired private UserDao userDao; public void query() { userDao.queryData(); } } @Repository public class UserDao { public void queryData() { System.out.println("查询数据"); } } // 2. 启动容器(SpringBoot中简化了,这里是原生Spring示例) public class Main { public static void main(String[] args) { ApplicationContext context = new AnnotationConfigApplicationContext("com.example"); // 从容器获取Bean,而非手动new UserService service = context.getBean(UserService.class); service.query(); // 输出:查询数据 } } (2) AOP(面向切面编程):无侵入式增强代码 问题背景:日志、事务、权限校验等「通用功能」,如果写在业务代码里,会造成代码冗余、难以维护。 核心逻辑: 将通用功能(如日志)抽离成「切面(Aspect)」,在不修改业务代码的前提下,动态织入到业务方法的执行流程中(比如方法执行前/后/异常时)。 核心概念: 切点(Pointcut):要增强的方法(比如所有 service 下的 save* 方法)。 通知(Advice):增强的逻辑(比如前置日志、后置事务提交)。 织入(Weaving):将切面应用到目标对象的过程(Spring 中默认是运行时织入)。
阅读全文