说明
Java9允许将服务接口定义在一个模块中,并使用uses语句来声明该服务接口,然后针对该服务接口提供不同的服务实现类,这些服务实现类可以分布在不同的模块中,服务实现模块则使用provides语句为服务接口指定实现类
使用方法
-
在模块module1下创建一个包com,在该包下提供一个接口,接口中定义一个抽象方法。
结构.png -
在com包下创建一个包impl,在该包下提供接口的两个实现类Student和Teacher
-
在module1这个模块下的描述性文件中添加如下配置
模块导出:exports 包名
服务提供:**provides 接口名 with 类名(为接口指定实现类)
import com.MyService;
import com.Student;
module module1 {
exports com;
provides MyService with Student;//指定MyService的实现类是Student
}
- 在模块module2这个模块下的描述性文件中添加如下配置
声明服务接口:uses MyService; - 在module2这个模块的类中使用MyService接口提供的服务
ServiceLoader:一种加载服务实现工具
import com.MyService;
import java.util.ServiceLoader;
public class Demo {
public static void main(String[] args) {
ServiceLoader<MyService> load = ServiceLoader.load(MyService.class);
for (MyService myService:load){
myService.service();
}
}
}
网友评论