1. 模块(Module)
模块是Java模块化的核心单元,是一个自包含的代码库,包含一组相关的包、资源(如图片、XML文件)和模块描述符(module-info.class)。它将代码组织成高内聚、低耦合的单元,明确界定模块的边界。模块通过module-info.java文件声明其名称(全局唯一)、依赖的其他模块以及对外公开的API(导出的包)。
2. 模块描述符(module-info.java)
每个模块的根目录下必须包含module-info.java文件,用于定义模块的元数据。其核心内容包括:
module关键字声明,如module com.example.myapp;requires关键字声明依赖的其他模块(如requires java.sql),可选添加transitive表示传递依赖(依赖的依赖也会被自动引入);exports关键字声明对外公开的包(如exports com.example.api),未导出的包对其他模块不可见;provides...with关键字声明服务提供者(如provides com.example.Service with com.example.impl.ServiceImpl),或通过uses关键字声明服务消费者(如uses com.example.Service)。3. 模块路径(Module Path)
模块路径是模块化系统引入的新概念,用于替代传统类路径(Classpath),专门指定模块化JAR文件或目录的位置。编译和运行模块化代码时,必须使用--module-path参数指定模块路径(如javac --module-path mods -d out src/*.java)。模块路径上的JAR文件必须是模块化的(包含module-info.class),确保模块的显式依赖和强封装性。
4. 模块类型
Java模块化系统支持三种主要模块类型:
module-info.java的模块,如module com.example.util,具有明确的依赖和导出规则;module-info.class)放置在模块路径上时,会自动转换为自动模块。其模块名由JAR文件名推导(如my-library-1.0.jar→my.library),默认导出所有包,依赖所有其他模块,用于兼容旧代码;java.base、java.sql、java.desktop),是所有命名模块的依赖基础(java.base隐式依赖,无需显式声明)。5. 服务机制(Service Discovery)
服务机制是模块化系统实现松耦合的关键特性,支持“服务提供者-服务消费者”模式:
provides...with语句在模块中声明实现某个服务接口的具体类(如provides com.example.Logger with com.example.impl.ConsoleLogger);uses语句声明使用的服务接口(如uses com.example.Logger),运行时通过ServiceLoader.load(ServiceInterface.class)动态加载所有实现类(如ServiceLoader<Logger> loader = ServiceLoader.load(Logger.class)),实现模块间的动态耦合。6. 强封装性(Strong Encapsulation)
强封装性是模块化系统的核心优势之一,通过exports关键字严格控制包的可见性:
public修饰符);module-info.java中显式导出的包,其他模块才能通过import语句访问;opens关键字开放包以支持反射访问(如opens com.example.internal to com.example.test),进一步增强封装的灵活性。免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。