-
Spring 到底是什么?和 Java 有什么关系?
-
Spring Boot 和 Spring 有什么区别?为什么有了Spring还要Boot?
-
Spring Cloud、Spring AI 又是什么?为什么名字里都带"Spring"?
-
Maven 又是干嘛的?为什么项目里都要配一个
pom.xml?
这些问题,网上有无数教程,但大部分只告诉你"怎么配",不告诉你"为什么"。我当时的感觉就是:好像懂了,又好像没懂。
我后来意识到技术不是凭空出现的,每一项技术都是为了解决某个具体痛点而诞生的。 当你理解了那个"痛点",你就理解了这项技术存在的意义。
你想要什么?
-
你需要一个对象(比如
UserService),你得自己new UserService()。 -
UserService需要依赖UserMapper,你得自己new UserMapper()然后想办法传给UserService。 -
如果项目里有几百个这样的对象,它们之间的依赖关系就像一团乱麻,改一个地方,到处都要跟着改。
这就是代码耦合问题。
你想要日志功能,于是你写了一段日志代码。然后你发现另一个方法也要加日志,你又写了一段。再然后,你发现几百个方法都要加日志,你开始怀疑人生。
这就是重复代码问题。
Java 本身解决不了这些问题,因为它只提供了基本的语法和API。于是,人们开始思考:能不能有一个"管家",帮我们管理这些对象的创建和依赖?能不能有一种方式,让我们把日志、事务这些散落各处的代码统一管理起来?
Spring 的核心思想------IOC(控制反转)和 AOP(面向切面编程)------就是为了解决这两个痛点而诞生的。
Spring
ioc和aop是spring框架的核心思想。我的理解是整个spring生态其实最大的价值都是解耦。spring完成了我们代码对象层面的解耦。
-
IOC :你不需要自己
new对象,管家(Spring容器)帮你创建好,你要用的时候找它拿就行。这就是"控制反转"------你把创建对象的控制权交给了Spring。 -
AOP:管家在后台默默地帮你把日志、事务这些通用功能织入到你需要的地方,你的业务代码不用关心这些琐事。
Maven
Maven 解决的就是项目构建和依赖管理的混乱。
-
标准化目录结构 :
src/main/java放代码,src/main/resources放配置,所有项目都是这个结构,新人也能立刻上手。 -
依赖管理 :你只需要在
pom.xml里声明你需要的包,Maven自动帮你下载、处理版本冲突。 -
生命周期管理 :编译、测试、打包、部署,一条
mvn命令自动完成。
Maven的核心思想是"约定优于配置"。它规定了一套标准,所有人遵守这套标准,效率就大大提高了。
Spring Boot
Spring 框架虽然强大,但配置极其繁琐。你光是想跑一个简单的Web项目,就需要写一大堆配置:配置Tomcat、配置Spring MVC、配置数据源、配置各种Bean。这些配置工作毫无技术含量,但又不得不做。它完成了我们配置层面的解耦。
Spring Boot 就是把"约定优于配置"的思想引入到Spring中。
-
你引入了
spring-boot-starter-web,Boot就自动帮你配好内置Tomcat、Spring MVC、JSON序列化。 -
你引入了
spring-boot-starter-data-redis,Boot就自动帮你配好Redis连接。
Spring Boot 的本质,就是Spring家族产品的"自动配置器"。它让单体应用的构建变得极其简单。
Spring Cloud
当你的业务从"一个人干"变成"一群人干",所有服务都在一个进程里的单体架构就不够用了。你需要把不同的业务拆成独立的服务,这就是微服务。而这个框架就是为了微服务而出现的。它的核心在于对微服务的治理。
-
服务A怎么知道服务B的地址?→ 服务发现
-
几十个服务的配置怎么统一管理?→ 配置中心
-
外部请求怎么路由到正确的服务?→ 网关
-
一个服务挂了怎么防止拖垮整个系统?→ 熔断降级
Spring Cloud 就是为这些"微服务治理"问题提供的一套标准化方案。它的核心思想是标准与实现分离:Spring Cloud定义了"服务发现怎么做"、"配置中心怎么调"的标准接口,具体实现可以是Nacos、Consul、Eureka等任何产品。你只需要面向接口编程,底层实现随意切换。
Spring AI
大模型火了之后,每个Java开发者都想在自己的项目里接入AI能力。但问题又来了:
-
OpenAI、阿里云、百度文心......每个厂商的API格式都不一样。
-
向量数据库有Elasticsearch、PgVector、Redis......每个的SDK都不同。
-
RAG、Function Calling、多Agent协作......这些概念每个都要自己从零实现吗?
Spring AI 就是专门来解决这个问题的。它的核心思想和Spring家族一脉相承:通过统一的接口和抽象,让你用同一套代码,无缝切换不同的底层实现。
-
你想用大模型聊天,注入
ChatClient,不管背后是qwen-plus还是gpt-4,调用方式都一样。 -
你想做向量检索,注入
VectorStore,不管底层是 PgVector 还是 Elasticsearch,写法完全一致。 -
你想让大模型调用你的业务方法,加一个
@Tool注解,Spring AI 自动把方法暴露给大模型,模型自己决定什么时候调用、传什么参数。
Spring AI 本质上就是Spring生态在AI时代的延续------把大模型集成这件事,变得像以前集成数据库一样简单、标准、优雅。
总结
| 技术 | 解决什么问题 | 核心思想 |
|---|---|---|
| Spring | 代码耦合严重,对象管理混乱 | IOC + AOP |
| Maven | 项目构建和依赖管理的混乱 | 约定优于配置 |
| Spring Boot | Spring框架配置繁琐 | 自动配置 |
| Spring Cloud | 微服务治理的复杂性 | 标准与实现分离 |
| Spring AI | AI技术栈分散,接入成本高 | 统一抽象、接口驱动 |
思想,才是这些技术背后不变的主线。具体工具只是思想的实现,理解了思想,工具自然就通了。
还有springmvc,帮助我们实现了web层面的解耦,分为控制,服务,数据,三层架构。这些只是我在学习路上的一些理解,期望对你有帮助,未来的我回看可能又会有新的理解。