Java9_模块化

偏执的太偏执、 2022-05-08 07:48 339阅读 0赞

前言

WX20181009-175940@2x

1、必须是java文件夹下面才可以创建module-info.java,添加两个maven。module项目。分别为one和two

WX20181009-181918

  1. module one {
  2. }
  3. module two {
  4. }

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

2.1、设置modulej级别为9(我的idea初始为5)

WX20181009-191640

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

WX20181009-191823

  1. package com.hlj.java9.can;
  2. public static class UtilCan {
  3. public void can(){
  4. System.out.println("can");
  5. }
  6. }
  7. package com.hlj.java9.cannot;
  8. public static class UtilCanNot {
  9. public void canNot(){
  10. System.out.println("canNot");
  11. }
  12. }

2.3、one中module-info.java

  1. module one {
  2. //导出可用包
  3. exports com.hlj.java9.can;
  4. }

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

  1. module two {
  2. requires one;
  3. }

2.5、two中开始使用

  1. package com.hlj.java9.use;
  2. import com.hlj.java9.can.UtilCan;
  3. //import com.hlj.java9.cannot.UtilCanNot; //导入了,但是报错
  4. public class Use {
  5. public static void main(String[] args) {
  6. UtilCan.can();
  7. // UtilCanNot.canNot(); 可以导入,但是编译不成功
  8. }
  9. }

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

### 3.1、创建接口和实现类

3.1.1、接口

  1. package com.hlj.java9.api;
  2. public interface MyServiceInter {
  3. void method();
  4. }

3.1.2、实现类

  1. package com.hlj.java9.api.impl;
  2. import com.hlj.java9.api.MyServiceInter;
  3. public class MyServiceInterImpl implements MyServiceInter {
  4. @Override
  5. public void method() {
  6. System.out.println("接口实现类");
  7. }
  8. public static void staticImpl(){
  9. System.out.println("接口实现类中自己定义的静态方法");
  10. }
  11. }

3.1.3、第二个实现类

  1. package com.hlj.java9.api.impl;
  2. import com.hlj.java9.api.MyServiceInter;
  3. public class MyServiceInterImplTwo implements MyServiceInter {
  4. @Override
  5. public void method() {
  6. System.out.println("第二个接口实现类");
  7. }
  8. }

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

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

3.3、two模块开始调用

3.3.1、two module-info.java

  1. import com.hlj.java9.api.MyServiceInter;
  2. module two {
  3. requires one;
  4. //使用接口的名称 ,上面已经导入了one模块了
  5. uses MyServiceInter ;
  6. }

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

  1. package com.hlj.java9.Consumer;
  2. import com.hlj.java9.api.MyServiceInter;
  3. //import com.hlj.java9.api.impl.MyServiceInterImpl;
  4. import java.util.ServiceLoader;
  5. /** * @Desc: * @Author HealerJean * @Date 2018/10/10 上午10:23. */
  6. public class ConsumerUse {
  7. public static void main(String[] args) {
  8. //专门用来提供服务的类
  9. ServiceLoader<MyServiceInter> loader = ServiceLoader.load(MyServiceInter.class);
  10. //所有的实现类
  11. for(MyServiceInter service:loader){
  12. service.method();
  13. }
  14. // MyServiceInterImpl.staticImpl(); ont中export必须是第一层包,不可以套多层
  15. }
  16. }

代码下载

ContactAuthor

发表评论

表情:
评论列表 (有 0 条评论,339人围观)

还没有评论,来说两句吧...

相关阅读

    相关 java9模块

    到现在了,都快java17了,可是对于java9的module对于正式生产的使用文章少之又少,由于可以分模块打包,在加上graalvm的native image,对于云原生发布

    相关 java9模块编程示例

        这里是把在慕课网上看到的《Java9之模块系统》课程代码学习了一遍,加深了一些对模块化的理解,但是还是不太懂如今这种模块化思想,其实在java里面有了maven管理依赖

    相关 java9-模块介绍

    java9的模块化类似于nodejs,如果大家学过,可能更好理解模块化的概念。Oracle为什么要给java加入模块化,主要有以下几个问题: 整个jre环境太大了,运行