Java9模块化开发(马克)

书: https://pan.baidu.com/s/1jDVnfhmGRwu5jeEuV63Kcg?pwd=bmyj
笔记如下:

  1. 模块化核心概念:Java 9引入JPMS(Java Platform Module System),通过module-info.java定义模块边界,解决JAR地狱问题。
  2. 模块声明语法
   module com.example.myapp {
       requires java.sql;          // 依赖其他模块
       exports com.example.api;    // 导出包
       opens com.example.impl;     // 反射开放包
   }
  1. 强封装性:默认禁止跨模块访问未导出包,打破传统类路径(Classpath)的宽松依赖。
  2. 模块类型
  • 命名模块:显式声明module-info.java
  • 未命名模块:传统类路径下的JAR,自动依赖所有模块(兼容旧代码)。
  • 自动模块:无module-info.java的JAR,转换为模块时过渡使用。
  1. 模块路径(Modulepath):替代类路径,通过--module-path指定模块位置。
  2. 服务加载机制provides...with声明服务实现,uses消费服务(强化SPI)。
  3. JLink工具:生成定制化JRE,仅包含应用所需模块,显著减小运行时体积。
  4. 拆分JDK模块:原rt.jar拆分为java.basejava.sql等75个模块,java.base为默认依赖。
  5. 反射限制:未opens的包禁止反射访问,需通过--add-opens运行时突破封装(慎用)。
  6. 兼容性处理
    • --add-modules强制添加模块依赖。
    • --add-reads增加模块读取权限。
  7. 模块化迁移策略
    • 自底向上:先封装底层库,逐步向上迁移。
    • 使用自动模块过渡混合路径(Modulepath+Classpath)。
  8. 多模块项目构建:Maven/Gradle支持模块化,子项目需定义module-info.java
  9. 模块化优势
    • 显式依赖管理,避免冲突。
    • 启动更快(仅加载必要模块)。
    • 更强的安全性(封装内部API)。
  10. 常见问题
    • 循环依赖需通过接口模块(requires transitive)解耦。
    • 第三方库未模块化时需转为自动模块。
  11. 工具链支持
    • jdeps分析依赖关系。
    • jmod创建JMOD格式模块(支持本地代码)。
  12. 模块化与OSGi对比:JPMS为语言层标准,OSGi侧重运行时动态性。
  13. 模块化测试:JUnit 5支持模块化测试,需配置--patch-module
  14. 模块化设计模式
    • 接口模块(exports...to限制使用方)。
    • 聚合模块(聚合多个子模块)。
  15. 微服务适配:模块化与Spring Boot共存方案(如spring-context-indexer优化扫描)。
  16. 未来演进:Project Jigsaw的后续优化(如动态模块加载、模块版本化)。

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注