java基础-模块使用
一. 概述
模块就是代码和数据的封装体。模块的代码被组织成多个包,每个包中包含Java类和接口;模块的数据则包括资源文件和其他静态信息。通过模块拆分,使应用程序模块化.
二. 模块使用
- 创建模块
在项目目录下创建模块mymod1/src,mymod2/src
mymod1:
com.qiyun.student
Student.java
mymod2:
com.qiyun.teacher
Teacher.java
mytest:
TestMain.java
-
模块使用
模块导出:在需要到处模块mymod1/src目录下创建module-info.java进行声明
module mymod1{
exports com.qiyun.student;
}
模块导入: 在需要使用模块mymod1的mytest模块下进行导入,在mytest/src目录下创建modele-info.java
module mytest{
requires mymod1;
}
然后就可以在mytest中调用模块mymod1下的类.
三. 模块服务使用
java6, 允许服务提供这与服务使用者之间完成解耦, 即服务使用者只面向接口编程,不清楚服务提供者的实现类.
java9, 允许将服务接口定义一个模块中, 使用uses语句来申明该服务接口, 然后针对该服务接口提供不同的服务实现类.这些服务实现类可以分布在不同的模块中,服务实现模块使用provides语句未服务接口指定实现类. 服务使用者只需要面向接口编程即可.
- 模块使用步骤
在mymod1模块下创建包com.qiyun.modservice, 在改包下提供接口,接口定义一个抽象方法
public interface MyService{
void service();
}
在com.qiyun.modservice包下创建mymodservice包, 包里面实现两个MyService接口的类.
public class MyserviceDome1 implements MyService{
@Override
public void service(){
system.out.println("This is MyserviceDemo1")
}
}
public class MyserviceDome2 implements MyService{
@Override
public void service(){
system.out.println("This is MyserviceDemo2")
}
}
导出包
module mymod1{
exports com.qiyun.student;
//模块导出
exports com.qiyun.mymodservice;
//指定MyService的服务实现类是MyserviceDemo2
provides MyService with MyserviceDemo2;
}
在myTest模块下使用Myservice 服务接口
module myTest{
requires Mymod1;
uses MyService;
}
public class Test{
public static void main(){
ServiceLoader<MyService> myService = ServiceLoader.load(Myuservice.class);
for(MyService my : myServices){
my.service();
}
}
}