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 中默认是运行时织入)。
