前言
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SN3kzM1EWO2QzNkBTNzYGMzYzX1QjNxgTMxMzLchDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
1、必須是java檔案夾下面才可以建立 module-info.java
,添加兩個maven。module項目。分别為one和two
module-info.java
{
}
{
}
2、設定子產品的依賴和權限
2.1、設定modulej級别為9(我的idea初始為5)
2.2、one中建立兩個包和方法
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
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必須是第一層包,不可以套多層
}
}