Java模块化

目录

1 模块化概述【理解】

2 模块的基本使用【应用】

2.1 必须是java文件夹下面才可以创建module-info.java,添加两个maven。module项目。

2.2、设置模块的依赖和权限

2.2.1、设置modulej级别为9

2.2.2、one中创建两个包和方法

2.3、one中module-info.java

2.4、two中进行引入,如果发现为红报错,则,alt+enter进行one包的引入

2.5、two中开始使用

3、模块化中的服务(Service接口)

3.1、创建接口和实现类

3.1.1、接口

3.1.2、实现类

3.1.3、第二个实现类

3.2、one module-info.java 服务开始提供

3.3、two模块开始调用

3.3.1、two module-info.java

3.3.2、开始测试使用 下面中的注释掉的解答下export必须是第一层才能够导出


模块化概述【理解】

Java 语言随着这些年的发展已经成为了一门影响深远的编程语言,无数平台,系统都采用 Java 语言编写。但是,伴 随着发展,Java 也越来越庞大,逐渐发展成为一门 臃肿 的语言。而且,无论是运行一个大型的软件系统,还是运 行一个小的程序,即使程序只需要使用Java 的部分核心功能, JVM 也要加载整个 JRE 环境。 为了给 Java“ 瘦身 ,让 Java实现轻量化, Java 9 正式的推出了模块化系统。 Java 被拆分为 N 多个模块,并允许 Java 程序可以根据需要选择加载程序必须的Java 模块,这样就可以让 Java 以轻量化的方式来运行
其实,Java 7 的时候已经提出了模块化的概念,但由于其过于复杂, Java 7 Java 8 都一直未能真正推出,直到 Java 9才真正成熟起来。对于 Java 语言来说,模块化系统是一次真正的自我革新,这种革新使得 古老而庞大 Java 语言 重新焕发年轻的活力

模块的基本使用【应用】

WX20181009-175940@2x

2.1 必须是java文件夹下面才可以创建module-info.java,添加两个maven。module项目。

分别为one和two

WX20181009-181918

module one {
}
 
 
module two {
}

2.2、设置模块的依赖和权限

2.2.1、设置modulej级别为9

WX20181009-191640

2.2.2、one中创建两个包和方法

WX20181009-191823

package com.oldlu.java9.can;
​
​
public static class UtilCan {
​
    public void can(){
        System.out.println("can");
    }
}
​
​
package com.oldlu.java9.cannot;
​
​
public static class UtilCanNot {
​
    public void canNot(){
        System.out.println("canNot");
    }
}
​
 
 

2.3、one中module-info.java

module one {
//导出可用包
     exports  com.oldlu.java9.can;
}
 
 

2.4、two中进行引入,如果发现为红报错,则,alt+enter进行one包的引入

module two {
     requires one;
}
​

2.5、two中开始使用

package com.oldlu.java9.use;
​
​
import com.oldlu.java9.can.UtilCan;
//import com.oldlu.java9.cannot.UtilCanNot; //导入了,但是报错
​
public class Use {
​
    public static void main(String[] args) {
        UtilCan.can();
//        UtilCanNot.canNot(); 可以导入,但是编译不成功
    }
}

3、模块化中的服务(Service接口)

3.1、创建接口和实现类

3.1.1、接口

package com.oldlu.java9.api;
​
public interface MyServiceInter {
​
    void method();
​
}

3.1.2、实现类

package com.oldlu.java9.api.impl;
​
import com.oldlu.java9.api.MyServiceInter;
​
​
public class MyServiceInterImpl  implements MyServiceInter {
​
    @Override
    public void method() {
        System.out.println("接口实现类");
    }
    
    public static  void staticImpl(){
    System.out.println("接口实现类中自己定义的静态方法");
}
​
}
 
 

3.1.3、第二个实现类

package com.oldlu.java9.api.impl;
​
import com.oldlu.java9.api.MyServiceInter;
​
​
public class MyServiceInterImplTwo implements MyServiceInter {
​
    @Override
    public void method() {
​
        System.out.println("第二个接口实现类");
    }
}

3.2、one module-info.java 服务开始提供

import com.oldlu.java9.api.MyServiceInter;
import com.oldlu.java9.api.impl.MyServiceInterImpl;
import com.oldlu.java9.api.impl.MyServiceInterImplTwo;
​
module one {
​
   //导出可用包
     exports  com.oldlu.java9.can;
​
     //对外提供的接口服务 ,下面指定的接口以及提供服务的impl,如果有多个实现类,用用逗号隔开    
     exports  com.hlj.java9.api;
     provides MyServiceInter  with MyServiceInterImpl, MyServiceInterImplTwo;
}
 
 

3.3、two模块开始调用

3.3.1、two module-info.java

import com.oldlu.java9.api.MyServiceInter;
​
module two {
     requires one;
​
     //使用接口的名称 ,上面已经导入了one模块了
     uses MyServiceInter  ;
}
 
 

3.3.2、开始测试使用 下面中的注释掉的解答下export必须是第一层才能够导出

package com.oldlu.java9.Consumer;
​
import com.oldlu.java9.api.MyServiceInter;
//import com.oldlu.java9.api.impl.MyServiceInterImpl;
​
import java.util.ServiceLoader;
​
/**
 * @Desc:
 * @Author admin
 */
public class ConsumerUse {
    public static void main(String[] args) {
​
        //专门用来提供服务的类
        ServiceLoader<MyServiceInter> loader = ServiceLoader.load(MyServiceInter.class);
        //所有的实现类
        for(MyServiceInter service:loader){
            service.method();
        }
​
//        MyServiceInterImpl.staticImpl(); ont中export必须是第一层包,不可以套多层
​
    }
}

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

赵广陆

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

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

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

打赏作者

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

抵扣说明:

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

余额充值