java 中ServiceLoader的使用即SPI
ServiceLoader也像ClassLoader一样,能装载类文件,但是使用时有区别,具体区别如下:
(1) ServiceLoader装载的是一系列有某种共同特征的实现类,而ClassLoader是个万能加载器;
(2)ServiceLoader装载时需要特殊的配置,使用时也与ClassLoader有所区别;
(3)ServiceLoader还实现了Iterator接口。
作用:
(1) 接口类和实现类不在同一个jar包下面
(2)根据接口Class动态加载实现类
(3)实现了解耦
通过在资源目录META-INF/services中放置提供者配置文件 来标识服务提供者
在com.student文件中,是具体实现类的名称全名,包括包名
具体实现
通过配置文件加载到所有的实现类
//通过load方法加载,传入父类class,和默认加载器
ServiceLoader<Student> stus =ServiceLoader.load(Student.class,ClassLoader.getSystemClassLoader());
for (Student s: stus ) {
System.out.println(t.toString();
}
还没有评论,来说两句吧...