天天看點

Java9_子產品化

前言

Java9_子產品化

1、必須是java檔案夾下面才可以建立​

​module-info.java​

​,添加兩個maven。module項目。分别為one和two

Java9_子產品化
{
}      
{
}      

2、設定子產品的依賴和權限

2.1、設定modulej級别為9(我的idea初始為5)

Java9_子產品化

2.2、one中建立兩個包和方法

Java9_子產品化
package com.hlj.java9.can;


public static class UtilCan {

    public void can(){
        System.out.println("can");
    }
}      
package com.hlj.java9.cannot;


public static class UtilCanNot {

    public void canNot(){
        System.out.println("canNot");
    }
}      

2.3、one中​

​module-info.java​

{
//導出可用包
     exports  com.hlj.java9.can;
}      

2.4、two中進行引入,如果發現為紅報錯,則,alt+enter進行one包的引入

module two {
     requires one;
}      

2.5、two中開始使用

package com.hlj.java9.use;


import com.hlj.java9.can.UtilCan;
//import com.hlj.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.hlj.java9.api;

public interface MyServiceInter {

    void method();

}      

3.1.2、實作類

package com.hlj.java9.api.impl;

import com.hlj.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.hlj.java9.api.impl;

import com.hlj.java9.api.MyServiceInter;


public class MyServiceInterImplTwo implements MyServiceInter {

    @Override
    public void method() {

        System.out.println("第二個接口實作類");
    }
}      

3.2、one module-info.java 服務開始提供

import com.hlj.java9.api.MyServiceInter;
import com.hlj.java9.api.impl.MyServiceInterImpl;
import com.hlj.java9.api.impl.MyServiceInterImplTwo;

module one {

   //導出可用包
     exports  com.hlj.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.hlj.java9.api.MyServiceInter;

module two {
     requires one;

     //使用接口的名稱 ,上面已經導入了one子產品了
     uses MyServiceInter  ;
}      

3.3.2、開始測試使用 下面中的注釋掉的解答下export必須是第一層才能夠導出

package com.hlj.java9.Consumer;

import com.hlj.java9.api.MyServiceInter;
//import com.hlj.java9.api.impl.MyServiceInterImpl;

import java.util.ServiceLoader;

/**
 * @Desc:
 * @Author HealerJean
 * @Date 2018/10/10  上午10:23.
 */
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必須是第一層包,不可以套多層

    }
}