温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

什么是模块化java Module

发布时间:2026-10-30 19:03:54 来源:亿速云 阅读:90 作者:小樊 栏目:编程语言

在 Java 语境下,**“模块化 Java(Java Module)”**通常指 Java 平台模块系统(JPMS,Java Platform Module System),从 Java 9 开始引入,核心概念是 Module(模块)。

下面用通俗 + 技术结合的方式说明。


一、什么是 Java Module(模块)

Java Module = 一组相关的包(package)+ 明确的边界和依赖声明

它解决了传统 Java 项目中:

  • 类路径(classpath)混乱
  • 隐式依赖
  • 强封装难以保证
  • 大型项目难以维护

的问题。


二、模块和传统项目的区别

传统方式(无模块)

lib/
  a.jar
  b.jar
classpath: a.jar:b.jar

问题:

  • 谁依赖谁?不清楚
  • 内部类也能被随便访问
  • 容易出 NoClassDefFoundError

模块化方式

moduleA
 ├─ package com.a.service
 └─ module-info.java

moduleB
 ├─ package com.b.ui
 └─ module-info.java

模块之间显式声明依赖。


三、核心文件:module-info.java

每个模块根目录有一个特殊文件:

module com.example.user {
    requires com.example.common;
    exports com.example.user.api;
}

关键指令

指令 作用
module 定义模块名
requires 依赖其他模块
exports 对外暴露包
opens 允许反射访问
provides 提供 SPI 实现
uses 使用 SPI 接口

四、模块的两个重要特性

1️⃣ 强封装(Strong Encapsulation)

  • 不 exports 的包,外部无法访问
  • 即使类是 public 也不行

2️⃣ 显式依赖(Explicit Dependencies)

  • 编译期和运行期都能检查依赖
  • 缺模块直接报错

五、模块类型

  1. 应用模块:你自己写的
  2. 平台模块:java.base, java.sql 等
  3. 自动模块:旧 jar 放模块路径自动转模块
  4. 未命名模块:classpath 上的旧代码

六、模块路径 vs 类路径

项目 classpath module path
依赖 隐式 显式
封装 弱 强
适用 老项目 Java 9+

七、简单示例

模块 A

module com.a {
    exports com.a.api;
}

模块 B

module com.b {
    requires com.a;
}

八、什么时候该用 Module?

✅ 适合:

  • 大型系统
  • 框架 / 中间件
  • 长期维护项目

❌ 不适合:

  • 小工具
  • 快速原型
  • 老项目强改

九、一句话总结

Java Module 是 Java 9 引入的“包之上的封装与依赖管理单位”,让 Java 从“能跑就行”走向“结构可控”。

如果你愿意,我也可以:

  • 用 Spring Boot + Module 示例
  • 讲 Module 与 Maven/Gradle
  • 对比 OSGi vs JPMS

你想看哪一个?

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手