首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >当年很流行,现在已经被淘汰的Java技术,请不要再继续学了!

当年很流行,现在已经被淘汰的Java技术,请不要再继续学了!

作者头像
苏三说技术
发布2025-07-27 10:05:20
发布2025-07-27 10:05:20
33100
代码可运行
举报
文章被收录于专栏:苏三说技术苏三说技术
运行总次数:0
代码可运行

大家好,我是苏三,又跟大家见面了。

前言

最近星球中有些球友的简历发给我,让我帮他修改(星球成员有1V1免费修改简历的服务),我打开简历之后被震惊了。

有一位小伙伴的简历里还写着“精通Struts、Hibernate、JPS” ,这些陈旧的技术栈。

而最新最主流的技术栈,一个都没写。

难怪不好找工作。

这篇文章跟大家一起聊聊当年很流行,现在已经被淘汰的Java技术,以及2025年该学什么才能保持竞争力,希望对你会有所帮助。

如果你也有修改简历的需求,欢迎加入星球。还能获取100万QPS短链系统、商城微服务、苏三AI项目、秒杀系统、商城系统、秒杀系统、代码生成工具等 7 个项目的 源代码、开发教程和技术答疑

一、Web开发领域的“化石级”技术

1. Struts:配置地狱的鼻祖

十年前,Struts几乎是Java Web开发的代名词。

但如今,**新项目采用率不足0.3%**(2024年统计数据)。

它的致命缺陷在于XML配置地狱

代码语言:javascript
代码运行次数:0
运行
复制
<!-- 典型的Struts配置片段 -->
<struts-config>
    <form-beans>
        <form-bean name="loginForm" type="com.example.LoginForm"/>
    </form-beans>
    <action-mappings>
        <action path="/login" 
                type="com.example.LoginAction"
                name="loginForm">
            <forward name="success" path="/home.jsp"/>
            <forward name="error" path="/error.jsp"/>
        </action>
    </action-mappings>
</struts-config>

这段配置定义了一个登录功能,需要编写FormBean、Action类、JSP页面三件套。

而同样功能在Spring Boot中:

代码语言:javascript
代码运行次数:0
运行
复制
@RestController
public class LoginController {
    @PostMapping("/login")
    public ResponseEntity<?> login(@RequestBody LoginRequest request) {
        // 业务逻辑直接在此处理
        return ResponseEntity.ok().build();
    }
}

淘汰原因

  1. 配置复杂度指数级增长:大型项目中struts-config.xml可达数千行
  2. 安全性漏洞频发:Struts2的OGNL注入漏洞曾引发大规模安全事件
  3. 测试困难:Action与Servlet API强耦合,难以单元测试

替代方案:Spring MVC + Spring Boot的约定优于配置模式,开发效率提升300%

2. JSP:前后端耦合的“历史遗产”

JSP技术允许在HTML中嵌入Java代码:

代码语言:javascript
代码运行次数:0
运行
复制
<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<body>
  <% for(int i=0; i<5; i++) { %>
    <p>Hello <%= request.getParameter("name") %></p>
  <% } %>
</body>
</html>

这种混合模式导致:

  1. 前端依赖后端编译:修改页面需重启服务
  2. 职责边界模糊:后端工程师被迫处理CSS/JS问题
  3. 性能瓶颈:首次请求需编译成Servlet类

现代方案:前后端分离架构(Vue/React + Spring RESTful API),通过JSON交互:

代码语言:javascript
代码运行次数:0
运行
复制
// Spring Boot控制器
@GetMapping("/users")
public List<User> getUsers() {
    return userService.findAll(); // 返回JSON
}
代码语言:javascript
代码运行次数:0
运行
复制
// Vue组件
axios.get('/users').then(response => {
    this.users = response.data // 数据绑定到前端
})

核心转变:后端专注数据服务(MC模式),前端专注展示交互(View层)

二、重量级框架的陨落

3. Hibernate:过度封装的代价

Hibernate曾以全自动ORM著称,试图完全隔离数据库:

代码语言:javascript
代码运行次数:0
运行
复制
// Hibernate查询示例
List<User> users = session.createQuery("FROM User WHERE department = :dept")
                   .setParameter("dept", "IT")
                   .list();

看似简洁却暗藏危机:

  1. 性能黑洞:N+1查询问题(获取User连带查询所有关联对象)
  2. 调优困难:Criteria API生成的SQL难以优化
  3. 学习曲线陡峭:Session管理、延迟加载、缓存机制复杂度高

现代替代:MyBatis的SQL透明化方案:

代码语言:javascript
代码运行次数:0
运行
复制
<!-- MyBatis映射文件 -->
<select id="findByDept" resultType="User">
    SELECT * FROM users WHERE department = #{dept}
    LIMIT 100 <!-- 明确控制查询行为 -->
</select>

架构启示技术封装不是越彻底越好,适当的“泄露抽象”反而提升系统可控性

4. EJB:分布式架构的“恐龙”

EJB(Enterprise JavaBeans)曾是企业级应用的黄金标准:

代码语言:javascript
代码运行次数:0
运行
复制
@Stateless
public class OrderServiceBean implements OrderService {
    @Resource
    private SessionContext context;
    
    @TransactionAttribute(REQUIRED)
    public void placeOrder(Order order) {
        // 分布式事务管理
    }
}

但其致命缺陷导致淘汰:

  1. 容器强依赖:必须部署在EJB容器(如WebLogic)
  2. 部署复杂度高:需配置ejb-jar.xml、weblogic-ejb-jar.xml等
  3. 测试困难:无法脱离容器运行单元测试

现代方案:Spring Cloud + Dubbo的轻量级分布式架构

代码语言:javascript
代码运行次数:0
运行
复制
@DubboService
public class OrderServiceImpl implements OrderService {
    @Transactional // 声明式事务
    public void placeOrder(Order order) {
        // 业务逻辑
    }
}

关键进化从重量级容器到轻量级容器,从分布式单体到微服务

三、客户端技术的消亡

5. Applet:浏览器插件的末路

Applet曾梦想“一次编写,到处运行”:

代码语言:javascript
代码运行次数:0
运行
复制
<applet code="HelloWorld.class" width=200 height=200>
</applet>

消亡的深层原因:

  1. 安全沙盒限制:无法访问本地文件系统
  2. 启动速度慢:需下载整个JRE环境
  3. 移动端不兼容:iOS/Android均不支持

替代方案:WebAssembly + Canvas实现浏览器端高性能应用

6. Swing:桌面开发的“活化石”

Swing的GUI开发模式:

代码语言:javascript
代码运行次数:0
运行
复制
JFrame frame = new JFrame();
JButton btn = new JButton("Click Me");
btn.addActionListener(e -> {
    JOptionPane.showMessageDialog(frame, "Hello Swing");
});
frame.add(btn);
frame.setSize(300, 200);
frame.setVisible(true);

淘汰原因:

  1. 界面风格陈旧:与现代化UI设计脱节
  2. 跨平台体验差:在不同OS上显示效果不一致
  3. 硬件加速不足:动画性能远逊于DirectX/Metal

现代方案:JavaFX(仍存续)或跨平台方案如Electron、Flutter

四、基础设施的更迭

7. Memcached:缓存领域的“前浪”

Memcached曾是缓存首选,但Redis凭借三大优势碾压:

  1. 数据结构单一 vs 五大数据类型支持
代码语言:javascript
代码运行次数:0
运行
复制
# Redis支持丰富结构
> HSET user:1000 name "John" age 30
> ZADD leaderboard 100 "Player1"
  1. 无持久化 vs RDB/AOF持久化
  2. 最大1MB值 vs 最大512MB值

性能对比

指标

Memcached

Redis

QPS

200k

300k+

持久化

数据结构

String

5种

集群模式

建议:新项目首选Redis,老系统迁移至Redis集群

五、特别提示:这些底层技术不能放弃

Servlet:Web技术的基石

虽然纯Servlet开发已淘汰,但必须深入掌握其原理

代码语言:javascript
代码运行次数:0
运行
复制
public class AuthFilter implements Filter {
    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) 
        throws IOException, ServletException {
        HttpServletRequest httpReq = (HttpServletRequest) req;
        if (!checkToken(httpReq.getHeader("Token"))) {
            ((HttpServletResponse)res).sendError(401);
            return;
        }
        chain.doFilter(req, res); // 继续过滤器链
    }
}

学习价值

  1. 理解MVC框架本质:Spring MVC基于DispatcherServlet
  2. 掌握请求生命周期:Filter → Servlet → Interceptor → Controller
  3. 性能优化基础:线程模型(单例vs原型)

技术淘汰的深层逻辑

为什么这些技术会死亡?

  1. 复杂度失控 Struts配置膨胀、EJB部署繁琐,违背KISS原则(Keep It Simple, Stupid)
  2. 开发模式进化 单体应用 → 微服务,混合开发 → 前后端分离
  3. 生态替代效应 Spring生态吞噬EJB,MyBatis取代Hibernate,Vue/React淘汰JSP
  4. 社区资源枯竭 Struts最新版本停留在2016年,而Spring Boot每月更新

2025年该学什么?

根据百万级Java开发者调研:

重点方向

  1. 云原生Java:Quarkus/Micronaut等低内存框架
  2. 响应式编程:Project Reactor实现非阻塞IO
  3. GraalVM原生镜像:提升启动速度50倍,降低内存占用90%
  4. Vector API:利用SIMD指令优化计算密集型任务

总结

技术淘汰不是终点,而是认知升级的起点。我建议所有Java开发者:

  1. 基础优先原则 死磕Servlet原理、JVM机制、并发编程(这些永不过时)
  2. 生态适配策略 关注Spring生态演进(Spring Boot 3.x支持Java 17+)
  3. 性能敏感思维 苹果用Swift重写服务后内存减少90% 的案例警示:资源效率即竞争力
  4. 定期技术审计 每季度用工具扫描技术栈:
代码语言:javascript
代码运行次数:0
运行
复制
mvn versions:display-dependency-updates
mvn versions:display-plugin-updates

技术人的终极竞争力:不是记住多少API,而是快速判断“什么该放弃”的能力

那些曾让我们“升职加薪”的旧技术,终将成为职业发展的绊脚石。

你还在用哪些“技术化石”?欢迎在评论区分享你的经历!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-07-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 苏三说技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 大家好,我是苏三,又跟大家见面了。
  • 前言
  • 一、Web开发领域的“化石级”技术
    • 1. Struts:配置地狱的鼻祖
    • 2. JSP:前后端耦合的“历史遗产”
  • 二、重量级框架的陨落
    • 3. Hibernate:过度封装的代价
    • 4. EJB:分布式架构的“恐龙”
  • 三、客户端技术的消亡
    • 5. Applet:浏览器插件的末路
    • 6. Swing:桌面开发的“活化石”
  • 四、基础设施的更迭
    • 7. Memcached:缓存领域的“前浪”
  • 五、特别提示:这些底层技术不能放弃
    • Servlet:Web技术的基石
  • 技术淘汰的深层逻辑
    • 为什么这些技术会死亡?
    • 2025年该学什么?
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档