模块的基本使用
模块使用步骤
- 创建模块(创建模块,创建包,创建类,定义方法)
-创建两个模块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();
- }
- }
- }
复制代码 运行结果:免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |