最近星球中有些球友的简历发给我,让我帮他修改(星球成员有1V1免费修改简历的服务),我打开简历之后被震惊了。
有一位小伙伴的简历里还写着“精通Struts、Hibernate、JPS” ,这些陈旧的技术栈。
而最新最主流的技术栈,一个都没写。
难怪不好找工作。
这篇文章跟大家一起聊聊当年很流行,现在已经被淘汰的Java技术,以及2025年该学什么才能保持竞争力,希望对你会有所帮助。
如果你也有修改简历的需求,欢迎加入星球。还能获取100万QPS短链系统、商城微服务、苏三AI项目、秒杀系统、商城系统、秒杀系统、代码生成工具等 7 个项目的 源代码、开发教程和技术答疑
十年前,Struts几乎是Java Web开发的代名词。
但如今,**新项目采用率不足0.3%**(2024年统计数据)。
它的致命缺陷在于XML配置地狱:
<!-- 典型的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中:
@RestController
public class LoginController {
@PostMapping("/login")
public ResponseEntity<?> login(@RequestBody LoginRequest request) {
// 业务逻辑直接在此处理
return ResponseEntity.ok().build();
}
}
淘汰原因:
替代方案:Spring MVC + Spring Boot的约定优于配置模式,开发效率提升300%
JSP技术允许在HTML中嵌入Java代码:
<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<body>
<% for(int i=0; i<5; i++) { %>
<p>Hello <%= request.getParameter("name") %></p>
<% } %>
</body>
</html>
这种混合模式导致:
现代方案:前后端分离架构(Vue/React + Spring RESTful API),通过JSON交互:
// Spring Boot控制器
@GetMapping("/users")
public List<User> getUsers() {
return userService.findAll(); // 返回JSON
}
// Vue组件
axios.get('/users').then(response => {
this.users = response.data // 数据绑定到前端
})
核心转变:后端专注数据服务(MC模式),前端专注展示交互(View层)
Hibernate曾以全自动ORM著称,试图完全隔离数据库:
// Hibernate查询示例
List<User> users = session.createQuery("FROM User WHERE department = :dept")
.setParameter("dept", "IT")
.list();
看似简洁却暗藏危机:
现代替代:MyBatis的SQL透明化方案:
<!-- MyBatis映射文件 -->
<select id="findByDept" resultType="User">
SELECT * FROM users WHERE department = #{dept}
LIMIT 100 <!-- 明确控制查询行为 -->
</select>
架构启示:技术封装不是越彻底越好,适当的“泄露抽象”反而提升系统可控性
EJB(Enterprise JavaBeans)曾是企业级应用的黄金标准:
@Stateless
public class OrderServiceBean implements OrderService {
@Resource
private SessionContext context;
@TransactionAttribute(REQUIRED)
public void placeOrder(Order order) {
// 分布式事务管理
}
}
但其致命缺陷导致淘汰:
现代方案:Spring Cloud + Dubbo的轻量级分布式架构:
@DubboService
public class OrderServiceImpl implements OrderService {
@Transactional // 声明式事务
public void placeOrder(Order order) {
// 业务逻辑
}
}
关键进化:从重量级容器到轻量级容器,从分布式单体到微服务
Applet曾梦想“一次编写,到处运行”:
<applet code="HelloWorld.class" width=200 height=200>
</applet>
消亡的深层原因:
替代方案:WebAssembly + Canvas实现浏览器端高性能应用
Swing的GUI开发模式:
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);
淘汰原因:
现代方案:JavaFX(仍存续)或跨平台方案如Electron、Flutter
Memcached曾是缓存首选,但Redis凭借三大优势碾压:
# Redis支持丰富结构
> HSET user:1000 name "John" age 30
> ZADD leaderboard 100 "Player1"
性能对比:
指标 | Memcached | Redis |
---|---|---|
QPS | 200k | 300k+ |
持久化 | ❌ | ✅ |
数据结构 | String | 5种 |
集群模式 | 弱 | 强 |
建议:新项目首选Redis,老系统迁移至Redis集群
虽然纯Servlet开发已淘汰,但必须深入掌握其原理:
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); // 继续过滤器链
}
}
学习价值:
根据百万级Java开发者调研:
重点方向:
技术淘汰不是终点,而是认知升级的起点。我建议所有Java开发者:
mvn versions:display-dependency-updates
mvn versions:display-plugin-updates
技术人的终极竞争力:不是记住多少API,而是快速判断“什么该放弃”的能力
那些曾让我们“升职加薪”的旧技术,终将成为职业发展的绊脚石。
你还在用哪些“技术化石”?欢迎在评论区分享你的经历!