模块化

模块化的访问控制通过类加载过程来完成

JDK8之前jar的缺陷

兼容Java9 之前

模块化下的类加载器

扩展类加载器(Extension Class Loader)被平台类加载器(Platform Class Loader)取代

新版的JDK也没了jre 现在可以用过jlink打包出一个jre:

jlink -p $JAVA_HOME/jmods --add-modules java.base --output jre

平台类加载器和应用程序类加载器都不再派生自java.net.URLClassLoader

模块化原则

Java 9 Jigsaw

模块系统

步骤

module-info.java

module module.hello { // 模块名
    requires java.base; // 需要的模块
    exports module.hello.wang.ismy.module; // 导出的模块
}
requires transitive java.net.http; // 传递依赖
requires java.se; // 调用一个聚合模块
exports module.hello.wang.ismy.module to java.xml; // 导出的模块只限定java.xml用

open

open module module.hello { // 开放整个模块
 opens wang.ismy.module; // 开放某个包
}

服务

module module1 {

    exports wang.ismy.module1;
    provides wang.ismy.module1.Service with wang.ismy.module1.impl.ServiceImpl,
            wang.ismy.module1.impl.ServiceImpl2;
}
module module2 {
    requires module1;
    uses wang.ismy.module1.Service;
}
ServiceLoader<Service> serviceLoader = ServiceLoader.load(Service.class);

        for (Service service : serviceLoader) {
            service.run();
        }

特点

OSGI