Java-模块化

打印 上一主题 下一主题

主题 914|帖子 914|积分 2742

模块的基本使用

模块使用步骤

  • 创建模块(创建模块,创建包,创建类,定义方法)
    -创建两个模块myOne,myTwo
  • 在模块的src目录下创建module-info.java的描述性文件,该文件专门定义模块名,访问权限,模块依赖等信息
    -描述性文件中使用模块导出和模块依赖来进行配置并使用
  • 模块中所有未导出的包都是模块私有的,是不能在模块之外被访问的
    -在myOne这个模块下的描述性文件中配置模块导出
    -模块导出格式:exports 包名;
  • 一个模块要访问其他的模块,必须明确指定依赖哪些模块,未指明依赖的模块不能访问
    -在myTwo模块下的描述性文件中配置依赖关系
    -模块依赖格式:require 模块名;
    -注意:模块名报错,需要按下Alt+Enter提示,然后选择模块依赖
  • 在myTwo这个模块的类中使用依赖模块下的内容
  1. //老师类
  2. public class Teacher {
  3.     public void teach(){
  4.         System.out.println("老师教书");
  5.     }
  6. }
复制代码
  1. //学生类
  2. public class Student {
  3.     public void study(){
  4.         System.out.println("学生学习");
  5.     }
  6. }
复制代码
  1. //模块导出配置
  2. module myOne {
  3.         //导出了com.chawaner_01,但没有导出com.chawaner_02
  4.     exports com.chawaner_01;
  5. }
复制代码
  1. //模块依赖配置
  2. module myTwo {
  3.     requires myOne;
  4. }
复制代码
测试1:
  1. //测试类:在模块myTwo中使用模块myOne中的内容
  2. public class Test01 {
  3.     public static void main(String[] args) {
  4.         Teacher te = new Teacher();
  5.         te.teach();
  6.     }
  7. }
复制代码
运行结果:因为导出了myOne模块下的com.chawaner_01,所以Teacher可以使用,运行无误
  1. 老师教书
复制代码
测试2:因为没有导出myOne模块下的com.chawaner_02,所以Student不能使用

模块化概述

Java9推出了模块化系统,让Java实现了轻量化。

模块服务的使用


在myOne模块下定义一个接口MyService
  1. //定义接口
  2. public interface MyService {
  3.     void service();
  4. }
复制代码
定义两个类Chawaner 和 Dounaifen,分别实现 Myservice 接口,重写 service() 方法
  1. public class Chawaner implements MyService {
  2.     @Override
  3.     public void service() {
  4.         System.out.println("茶碗儿");
  5.     }
  6. }
复制代码
  1. public class Dounaifen implements MyService {
  2.     @Override
  3.     public void service() {
  4.         System.out.println("豆奶粉");
  5.     }
  6. }
复制代码
在模块 myOne 中导出 com.chawaner_03 ,并指定 MyService 的实现类为 Chawaner
  1. module myOne {
  2.         exports com.chawaner_01;
  3.     exports com.chawaner_03;
  4.     //服务提供:指定MyService的实现类为Chawaner
  5.     //只需要提供具体的实现类
  6.     provides MyService with Chawaner;
  7. }
复制代码
在 myTwo 这个模块下的描述性文件中添加配置,声明服务接口为MyService
  1. module myTwo {
  2.     requires myOne;
  3.     //使用接口
  4.     //面向接口编程,只需要加载接口
  5.     uses MyService;
  6. }
复制代码
在myTwo这个模块的类中使用MyService接口提供的服务。
ServiceLoader:一种加载服务实现的工具
  1. public class Test01 {
  2.     public static void main(String[] args) {
  3.         //ServiceLoader.load(接口.class):加载服务
  4.         //面向接口编程,只需要加载接口
  5.         ServiceLoader<MyService> myServices = ServiceLoader.load(MyService.class);
  6.         //遍历服务,拿到接口
  7.         for (MyService myService : myServices) {
  8.             //接口调用方法
  9.             //实际上是指定的接口的实现类,调用重写的service()方法
  10.             myService.service();
  11.         }
  12.     }
  13. }
复制代码
运行结果:
  1. 茶碗儿
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

卖不甜枣

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表