3.模块化

1.模块的基本使用

,模块的基础使用步骤

  • 创建模块(按照以前的讲解方式创建模块,创建包,创建类,定义方法)

    • 为了体现模块的使用,创建两个模块:myOnemyTwo
  • 在模块的src目录下新建一个名为module-info.java的描述性文件,该文件专门定义模块名,访问权限,模块依赖等信息

    • 描述性文件中使用模块导出和模块依赖来进行配置并使用。
  • 模块中所有未导出的包都是模块私有的,他们是不能在模块之外被访问的

    • myOne这个模块下的描述性文件中配置模块导出
    • 模块导处格式:exports 包名;
  • 一个模块要访问其他的模块,必须明确指定依赖哪些模块,未明确指定依赖的模块不能访问

    • myTwo这个模块下的描述性文件中配置模块依赖

    • 模块依赖格式:requires 模块名;

    • 注意:写模块名报错,需要按下Alt+Enter提示,然后选择模块依赖

  • myTwo这个模块的类中使用依赖模块下的内容

代码:

  • 模块结构图

image-20211227113022705

  • myOne模块
    • module-info.java
module myOne {
    exports com.Study01;
}
  • myTwo模块
    • module-info.java
module myTwo {
    requires myOne;
}

2. 模块化

  1. 模块化概述

随着Java语言的发展,其规模越来越大,导致即使只是运行一个小的程序,程序只需要使用Java部分核心功能,JVM也要加载整个JRE环境。

为了给Java“瘦身”,让Java实现轻量化,Java9正式推出了模块化系统。Java被拆分为N多个模块,并允许Java程序可以根据需要选择加载程序必须的Java模块,这样就可以实现Java以轻量化的方式运行。

3.模块服务的使用

服务:从Java6开始,Java提供了一种服务机制,允许服务提供者和服务使用者之间完成解耦,简单的说,就是服务使用者只面向接口编程,但不清楚服务提供者的实现类。

Java9的模块化系统则进一步的简化了Java的服务机制。Java9允许将服务接口定义在一个模块中,并使用uses语句来声明该服务接口,然后针对该服务接口提供不同的服务实现类,这些服务实现类可以分布在不同的模块中,服务实现模块则使用provides语句为服务接口指定实现类

服务使用者只需要面向接口编程即可。

模块服务的使用步骤:

  • myOne模块下创建一个包com.Study03,在该包下提供一个接口,接口中定义一个抽象方法

    • public interface MyService{ void serice(); }
  • com.Study03包下创建一个包impl,在该包下提供接口的两个实现类test01test02

  • myOne这个模块下的描述性文件中添加如下配置

    • 模块导出:exports com.Study03;
    • 服务提供:provides MyService with test01; 指定有Service的服务实现类是test01
  • myTwo这个模块下的描述性文件中添加如下配置:

    • 声明服务接口:uses MyService;
  • myTwo这个模块的类中使用MyService接口提供的服务

    • ServiceLoader:一种加载服务实现的工具

代码:

  • 模块结构

image-20211227141955123

  • myOne模块

    ①.MyService接口

package HandsomeBoy;

public interface MyService {
    void service();
}

​ ②.ming

package HandsomeBoy.impl;

import HandsomeBoy.MyService;

public class ming implements MyService {
    @Override
    public void service() {
        System.out.println("ming");
    }
}

​ ③.lei

package HandsomeBoy.impl;

import HandsomeBoy.MyService;

public class lei implements MyService {
    @Override
    public void service() {
        System.out.println("学IT,来黑马");
    }
}

​ ④.module-info.java

import HandsomeBoy.MyService;
import HandsomeBoy.impl.ming;

module myOne {
    exports HandsomeBoy;

//    provides MyService with Itheima;
    provides MyService with ming;
}
  • myTwo模块

    ①.Test02

package cn.itcast;

import HandsomeBoy.MyService;

import java.util.ServiceLoader;

public class Test02 {
    public static void main(String[] args) {
        //加载服务
        ServiceLoader<MyService> myServices = ServiceLoader.load(MyService.class);

        //遍历服务
        for(MyService my : myServices) {
            my.service();
        }
    }
}

​ ②.module-info.java

import HandsomeBoy.MyService;

module myTwo {
    requires myOne;

    uses MyService;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幺洞两肆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值