Java-模块化

文章介绍了Java9的模块化系统,包括如何创建和配置模块,如在`module-info.java`中定义模块名、访问权限和依赖。通过示例展示了如何在模块间导出包和指定依赖,以及如何使用`ServiceLoader`加载模块提供的服务。在模块`myOne`中定义接口和服务实现,然后在`myTwo`模块中声明使用接口并加载服务。
摘要由CSDN通过智能技术生成

模块的基本使用

模块使用步骤

  • 创建模块(创建模块,创建包,创建类,定义方法)
    -创建两个模块myOne,myTwo
  • 在模块的src目录下创建module-info.java的描述性文件,该文件专门定义模块名,访问权限,模块依赖等信息
    -描述性文件中使用模块导出和模块依赖来进行配置并使用
  • 模块中所有未导出的包都是模块私有的,是不能在模块之外被访问的
    -在myOne这个模块下的描述性文件中配置模块导出
    -模块导出格式:exports 包名;
  • 一个模块要访问其他的模块,必须明确指定依赖哪些模块,未指明依赖的模块不能访问
    -在myTwo模块下的描述性文件中配置依赖关系
    -模块依赖格式:require 模块名;
    -注意:模块名报错,需要按下Alt+Enter提示,然后选择模块依赖
  • 在myTwo这个模块的类中使用依赖模块下的内容

在这里插入图片描述

//老师类
public class Teacher {
    public void teach(){
        System.out.println("老师教书");
    }
}
//学生类
public class Student {
    public void study(){
        System.out.println("学生学习");
    }
}
//模块导出配置
module myOne {
	//导出了com.chawaner_01,但没有导出com.chawaner_02
    exports com.chawaner_01;
}
//模块依赖配置
module myTwo {
    requires myOne;
}

测试1:

//测试类:在模块myTwo中使用模块myOne中的内容
public class Test01 {
    public static void main(String[] args) {
        Teacher te = new Teacher();
        te.teach();
    }
}

运行结果:因为导出了myOne模块下的com.chawaner_01,所以Teacher可以使用,运行无误

老师教书

测试2:因为没有导出myOne模块下的com.chawaner_02,所以Student不能使用
在这里插入图片描述

模块化概述

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

在这里插入图片描述

模块服务的使用

在这里插入图片描述

在myOne模块下定义一个接口MyService

//定义接口
public interface MyService {
    void service();
}

定义两个类Chawaner 和 Dounaifen,分别实现 Myservice 接口,重写 service() 方法

public class Chawaner implements MyService {
    @Override
    public void service() {
        System.out.println("茶碗儿");
    }
}
public class Dounaifen implements MyService {
    @Override
    public void service() {
        System.out.println("豆奶粉");
    }
}

在模块 myOne 中导出 com.chawaner_03 ,并指定 MyService 的实现类为 Chawaner

module myOne {
	exports com.chawaner_01;
    exports com.chawaner_03;
    //服务提供:指定MyService的实现类为Chawaner
    //只需要提供具体的实现类
    provides MyService with Chawaner;
}

在 myTwo 这个模块下的描述性文件中添加配置,声明服务接口为MyService

module myTwo {
    requires myOne;
    //使用接口
    //面向接口编程,只需要加载接口
    uses MyService;
}

在myTwo这个模块的类中使用MyService接口提供的服务。
ServiceLoader:一种加载服务实现的工具

public class Test01 {
    public static void main(String[] args) {
        //ServiceLoader.load(接口.class):加载服务
        //面向接口编程,只需要加载接口
        ServiceLoader<MyService> myServices = ServiceLoader.load(MyService.class);

        //遍历服务,拿到接口
        for (MyService myService : myServices) {
            //接口调用方法
            //实际上是指定的接口的实现类,调用重写的service()方法
            myService.service();
        }
    }
}

运行结果:

茶碗儿
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值