Module là đơn vị ứng dụng độc lập, đại diện cho một chức năng đơn lẻ. Module chứa 3 thành phần cốt lõi:
- Name: Định danh duy nhất.
- Dependencies: Các module khác mà module này phụ thuộc.
- Exported packages: Package mở ra cho module khác sử dụng.
Khai báo module qua file module-info.java tại root source code.
Template module-info.java
module <module-name> {
requires <module-name1>;
requires <module-name2>;
...
exports <package-name1>;
exports <package-name2>;
...
exports <package-name> to <module-name>;
}
Chi tiết các thành phần
| Thành phần | Từ khóa | Mô tả |
|---|---|---|
| Name | module name | Định danh duy nhất, bắt buộc. Hệ thống module nhận diện bằng tên này. |
| Dependencies | requires | Khai báo phụ thuộc module khác. Mỗi module phụ thuộc một dòng requires. Module java.base có sẵn ngầm, không cần requires. |
| Exported packages | exports | Xuất khẩu package để module khác dùng. Mỗi package một dòng exports. |
| Qualified export | exports ... to | Xuất khẩu package chỉ cho module cụ thể (giới hạn phạm vi). |
Ví dụ thực tế
module com.tutorialspoint.app {
// Phụ thuộc module services
requires com.tutorialspoint.services;
// Phụ thuộc transitive (tự động truyền cho caller)
requires transitive java.logging;
// Xuất khẩu package util công khai
exports com.tutorialspoint.app.util;
// Xuất khẩu package internal chỉ cho module cụ thể
exports com.tutorialspoint.app.internal to com.tutorialspoint.trusted;
// Sử dụng service
uses com.tutorialspoint.spi.MyService;
// Cung cấp triển khai service
provides com.tutorialspoint.spi.MyService with com.tutorialspoint.impl.MyServiceImpl;
// Mở package cho reflection
opens com.tutorialspoint.app.model;
}
Module java.base
Module nền tảng (java.base) chứa các package cơ bản: java.lang, java.util, java.io, java.nio... Mọi module đều requires java.base ngầm.
File module-info.java là "hợp đồng" của module – định nghĩa ranh giới, phụ thuộc, API công khai.