Java后端技术学习指南:你需要避免学习的过时技术和工具

我从事 Java 开发近 20 年,见证了无数 Java 技术的演变,包括:

  • JavaEE 框架的更迭,从多种技术并存到如今 Spring 基本上占据主导地位。
  • Web 开发的转变,从早期使用的 SSH 架构到现在常见的 SpringMVC + MyBatis 组合。
  • 开发环境的更迭,从当年的 JBuilder、Eclipse 到如今更为高效的 IDEA。

在本文中,我将重点讨论哪些 Java 技术“已经过时”,不再值得继续学习。我的判断依据主要有以下几点:

  1. 实际开发中是否有用?
  2. 是否能够加深对技术的理解?
  3. 对于面试是否有帮助?

JSP:已被前后端分离取代

JSP 在实际开发中主要用于 MVC 模型的视图层(View)。不过,目前的开发模式中,除了 JSP,还有 FreeMarker、Velocity 等渲染技术。

在使用 JSP 作为页面模板时,后端通过 MVC 框架将其渲染成 HTML,并发送给客户端(如浏览器)展示。这种方法通常被称为“前后端不分离”或“混合式”开发。然而,如今很多互联网公司,包括我所在的公司,已经抛弃这种模式,转而采用“前后端分离”的架构。

在“前后端分离”的模式中,后端只需提供服务接口(如 REST),前端(如 HTML5)通过接口发送和获取数据(如 JSON 格式)。因此,原来的 MVC 框架在某种程度上演变为 MC 框架,与 V(View)相关的所有模板技术学习的必要性随之降低,其中也包括 JSP。因此,我的建议是:

“完全可以放弃对 JSP 的学习。”

Struts:取而代之的是 Spring MVC

在 Java 后端开发中,MVC 模型仍然是主流,而 Struts 作为一种 MVC 框架,技术上确实表现出色。然而,Spring 的强势崛起使其逐渐成为 Java 开发中“一站式”工具包,其中 Spring MVC 是其核心组件。

Spring MVC 本身也是一个 MVC 框架,且因其与 Spring 的完美结合,使用起来相对更加顺畅。此外,Spring MVC 在设计之初就借鉴了其他 MVC 框架(包括 Struts)的优缺点,因此在使用体验上,Spring MVC 的易用性和灵活性显然更高。

目前,虽然许多公司仍在维护旧的 Struts 项目,但新的项目开发则更倾向于使用 Spring MVC。如果你是 Java 的新手,我的建议是:

“不要再学习 Struts,从 Spring MVC 开始吧!”

Hibernate:轻量级 MyBatis 的崛起

Hibernate 作为老牌的 ORM 映射框架,功能强大且涵盖广泛,但它的复杂性也成为了开发者的负担。Hibernate 的设计目的是为了尽可能解放程序员,完全隔离数据库,使得编程人员甚至不需要编写 SQL 语句,仅通过配置即可实现数据库操作。

然而,为了实现这一目标,Hibernate 的设计变得非常复杂,导致了以下几个问题:

  1. 学习成本高
  2. 配置繁琐
  3. 调优困难

尤其是在调优方面,由于 Hibernate 追求彻底的 OR 映射,必然会影响性能。如果应用对性能敏感,就会发现 Hibernate 的复杂性带来的调优困难。尽管 Hibernate 支持 SQL 级别的调优,但这需要开发者对该框架有深入的理解,导致更高的学习成本。

目前,MyBatis 作为一个轻量级的 ORM 框架,因其灵活性而受到广泛欢迎,它继承了 Hibernate 的优点,同时避免了它的复杂性。因此,我建议后来的学习者:

“完全可以放弃对 Hibernate 的学习,转而学习 MyBatis。”

Servlet:深刻理解的必备基础

虽然现在没有公司会单纯使用 Servlet 实现整个 Web 应用,而是转向更高级的技术(如各种 MVC 框架),这导致一些人认为 Servlet 已经过时,后来者无需学习。

但我可以非常明确地说:这种观点是极其错误和不负责任的。

Servlet 不仅要学习,而且要深入掌握。虽然 Servlet 不是主流的 Web 开发技术,但它依然是 Java Web 开发的基础,是 Java Web 容器的基石。如今流行的许多 MVC 框架(包括 SpringMVC)在底层仍然基于 Servlet。因此,想要彻底掌握某个 MVC 框架,就必须深入理解 Servlet。

此外,Servlet 作为基础设施的价值不容小觑。精通它能够帮助你理解各种 MVC 框架的底层原理,并且在实际开发中也有很多应用场景。例如,掌握 Servlet 生命周期的细节,可以帮助你在请求到达时进行拦截或权限校验,也可以在响应发送前统一检查和附加信息。因此,如果你正处于 Java 学习阶段,我的建议是:

“Servlet 不仅要学,而且要学深、学透。”

其他不再推荐学习的技术

目前在国内,Java 更多地作为 Web 后端技术使用,因此许多技术在现实应用中不再适用,学习的意义不大。以下是一些例子:

  1. Applet:作为页面插件技术,已经被时代淘汰。
  2. Swing:虽然是桌面 UI 框架,但在实际开发中,使用 C++ (如 MFC)或 C#(Winform、WPF)的情况更为普遍,因此没有学习的必要。
  3. JDBC:作为较低层的数据库基础设施,虽然被许多框架(例如 MyBatis)支持,但程序员即使不了解也无大碍。如果时间有限,可以将其学习优先级排低。
  4. XML:虽然 XML 仍在广泛应用,但正逐渐被 JSON 取代。因此,了解 XML 的基本概念即可,复杂的 XML 操作 API(如 XPath)完全可以不必深入学习,实际需求时再另行查阅也不迟。