如果 Spring 没了,Java 会怎么样?

在程序员圈子里,其实一直存在一条隐形鄙视链:

C++ 看不起 Java Go 看不起 Java 有时候 连 Java 程序员自己都看不起 Java

吐槽理由也非常统一:

  • Java 太臃肿

  • 配置 太复杂

  • 启动 太慢

  • 代码 太多

很多人甚至直接说:

“Java 就是历史包袱。”

但奇怪的是,

被骂了二十多年,Java 依然是企业级开发的王者。

全球银行系统 金融清算系统 大型电商后台 政府系统

几乎清一色 Java + Spring

那问题来了:

Java 为什么没死?

是因为:

  • Java 语法优雅?

  • JVM 性能无敌?

都不是。

真正保住 Java 江山的,只有一个名字:

Spring。

-****01-

**如果 Spring 明天消失 **

我们做一个思想实验:

如果明天 Spring 框架突然消失,Java 会发生什么?

答案可能比你想象的更残酷:

Java 不会死。

但它会迅速 凉透

最终退化成,

下一个 COBOL。

还能运行老系统,但 没人愿意再写新系统

现在的 Java 新人其实很幸福。

你们眼中的 Java 开发是这样的:

<pre data-start="751" data-end="853" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important;">

打开 IDEA New Project -> Spring Initializr 勾选: Web Lombok JPA 写一个 @RestController 启动 接口通了

</pre>

整个过程:

不到 3 分钟。

但在 Spring 统一天下之前(J2EE 时代) Java 企业开发几乎是 灾难级体验

那时候我们用的是:

EJB(Enterprise JavaBeans)

写一个简单 CRUD,你需要:

  • Home 接口

  • Remote 接口

  • Bean 实现类

  • 一大堆 XML

  • JNDI 配置

换句话说:

你只是想喝杯水 J2EE 却让你 先挖井,再铺水管,还要考水质检测证。

Spring 的出现,本质是一场 软件工程革命

它做了两件事:

1 IOC(控制反转)

对象不再自己创建。

交给 容器管理

以前:

<pre data-start="1213" data-end="1269" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important;">

UserService service=newUserServiceImpl();

</pre>

现在:

<pre data-start="1276" data-end="1319" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important;">

@Autowired UserServiceservice;

</pre>

对象的生命周期、依赖关系, 全部交给 Spring。

2 AOP(面向切面)

横切逻辑统一处理:

  • 事务

  • 日志

  • 权限

  • 监控

以前:

<pre data-start="1414" data-end="1478" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important;">

beginTransaction(); saveUser(); commitTransaction();

</pre>

现在:

<pre data-start="1485" data-end="1537" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important;">

@Transactional public void saveUser(){ }

</pre>

一行注解解决。

Spring 用 IOC + AOP 两把手术刀

直接切掉了 Java 80% 的样板代码。

[图片上传失败...(image-5d9728-1773307110263)]

-****02-

**没有 Spring,Java 会变得多无助? **

很多人吐槽:

“Java 操作数据库太麻烦。”

真的吗?

我们看看 没有 Spring 的 JDBC

<pre data-start="1699" data-end="2366" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important;">

Connection conn=null;

PreparedStatement stmt=null;

ResultSet rs=null;

try {Class.forName("com.mysql.cj.jdbc.Driver");

conn=DriverManager.getConnection(DB_URL, USER, PASS);  

Stringsql="SELECT * FROM users WHERE id = ?";  

stmt=conn.prepareStatement(sql);  

stmt.setLong(1, 1001L);  

rs=stmt.executeQuery();  

while(rs.next()){Useruser=newUser();  

user.setId(rs.getLong("id"));  

user.setName(rs.getString("name"));    

}} catch (Exceptione) {e.printStackTrace();

} finally {

if(rs!=null) rs.close();  

if(stmt!=null) stmt.close();  

if(conn!=null) conn.close();  }

</pre>

看完这段代码,你的血压上来了吗?

问题还不止这些:

  • 连接池管理

  • 事务回滚

  • 异常处理

  • 资源释放

全部 手写。

而在 Spring 世界里:

<pre data-start="2459" data-end="2550" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important;">

public interface UserRepository extendsJpaRepository<User, Long> { }

</pre>

甚至 SQL 都不用写。

这就是 Spring 的威力。

现在的软件世界已经进入:

云原生时代(Cloud Native)

标配是:

  • 微服务

  • 容器

  • Kubernetes

从语言角度看:

Go 天生更适合云原生:

  • 启动快

  • 体积小

  • 部署简单

Java 其实 先天劣势很明显

但是谁把 Java 硬生生留在牌桌上

答案还是:

Spring。

Spring Boot

让 Java 项目:

复杂配置时代自动配置时代

<pre data-start="2860" data-end="3009" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important;">

@SpringBootApplication public class App { public static void main(String[] args){ SpringApplication.run(App.class); } }

</pre>

一个类启动整个系统。

Spring Cloud

直接解决微服务三大问题:

能力 组件
服务注册 Nacos / Eureka
配置管理 Spring Cloud Config
服务熔断 Resilience4j / Sentinel

如果没有这些生态:

你需要自己写:

  • 服务发现

  • RPC

  • 负载均衡

  • 重试机制

  • 熔断降级

基本等于:

自己造一个 Dubbo。

Spring 甚至开始解决 Java 最大痛点:

启动慢。

通过 GraalVM + Spring Native

Java 应用可以:

  • 编译成 原生二进制

  • 毫秒级启动

  • 镜像体积大幅缩小

这一步,直接让 Java 重新进入云原生赛道。

[图片上传失败...(image-8144a5-1773307110263)]

-****03-

Spring 与 Java:共生关系

很多人说:

Java 离不开 Spring。

其实更准确的说法是:

Spring 已经成为 Java 的操作系统。

可以这样理解:

层级 角色
Java 语言
JVM 运行时
Spring 开发平台

Java 提供:

  • 语法

  • JVM

  • 基础类库

Spring 提供:

  • 开发框架

  • 微服务生态

  • 企业级能力

[图片上传失败...(image-b7b9d1-1773307110263)]

-****04-****总结

离开 Spring 的 Java,

就像:

没有钢铁战衣的托尼·斯塔克。

他依然:

  • 聪明

  • 有钱

  • 技术强

但再也无法:

肉身扛导弹。

所以下次HR说:

“你下周可以来上班了”

你可以在心里默默补一句:

“感谢 Spring,赏饭吃。”

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容