模块化

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

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