模块系统:怎么模块化你的应用程序

56 阅读1分钟

模块化公开接口

首先呢,我们把公开接口的部分,也就是 co.ivi.jus.crypto 这个 Java 包封装到一个 Java 模块里。我们给这个模块命名为 jus.crypto。Java 模块的定义,使用的是 module-info.java 这个文件。这个文件要放在源代码的根目录下。下面的代码,就是我们封装公开接口的部分的 module-info.java 文件。

module jus.crypto {
    exports co.ivi.jus.crypto;

    uses co.ivi.jus.crypto.DigestManager;
}

第一行代码里的“module”,就是模块化定义的关键字。紧接着 module 的就是要定义的模块的名字。

第二行代码里的“exports”, 说明了这个模块允许外部访问的 API,也就是这个模块的公开接口。“模块的公开接口”,是一个 Java 模块带来的新概念。

第四行代码里的“uses”呢,则说明这个模块直接使用了 DigestManager 定义的服务接口。

模块化内部接口

module jus.crypto.impl {
    requires jus.crypto;

    provides co.ivi.jus.crypto.DigestManager with co.ivi.jus.impl.DigestManagerImpl;
}

第二行代码里的“requires”说明,这个模块需要使用 jus.crypto 这个模块。也就是说,定义了这个模块的依赖关系。有了这个明确定义的依赖关系,加载这个模块的时候,Java 运行时就不再需要地毯式地搜索依赖关系了。

第四行代码里的“provides”说明,这个模块实现了 DigestManager 定义的服务接口。同样的,有了这个明确的定义,服务接口实现的搜索,也不需要地毯式地排查了。

模块化应用程序

module jus.crypto.use {
    requires jus.crypto;
}

第一行代码定义了 jus.crypto.use 这个 Java 模块。

第二行代码里的“requires”, 说明这个模块需要使用 jus.crypto 这个模块。


此文章为9月Day20学习笔记,内容来源于极客时间《深入剖析 Java 新特性》