
在很多开源组件里经常会看到java.util.ServiceLoader的使用,这里给大家介绍下怎么通过ServiceLoader找到一个接口的所有实现类。
我们新建一个接口Hello
public interface Hello {
String say();
}
然后创建一个实现类DefaultHello
public class DefaultHello implements Hello { @Override
public String say() {
return "Default Hello";
}
}
然后在META-INF/services目录下创建一个文件,文件名是接口全称,这里是com.proxy.Hello
内容是具体实现类的全限定名com.proxy.DefaultHello
再执行如下代码
public class ServiceLoaderDemo { public static void main(String[] args) { Hello obj = ServiceLoader.load(Hello.class).iterator().next(); System.out.println(obj.say()); }
}
就可以得到结果
Default Hello
说明ServiceLoader.load这个方法返回了DefaultHello对象,在文件里我们也可以写多个实现类,一行一个,相应用iterator遍历。