- e();
- }
- package com.impl;
- import com.service.IService;
- public class HDFSService implements IService {
- @Override
- public String sayHello() {
- return "Hello HDFSService";
- }
- @Override
- public String getScheme() {
- return "hdfs";
- }
- }
- package com.impl;
- import com.service.IService;
- public class LocalService implements IService {
- @Override
- public String sayHello() {
- return "Hello LocalService";
- }
- @Override
- public String getScheme() {
- return "local";
- }
- }
- com.impl.HDFSService
- com.impl.LocalService
- package com.test;
- import java.util.ServiceLoader;
- import com.service.IService;
- public class Test {
- public static void main(String[] args) {
- ServiceLoader<IService> serviceLoader = ServiceLoader.load(IService.class);
- for (IService service : serviceLoader) {
- System.out.println(service.getScheme()+"="+service.sayHello());
- }
- }
- }
结果:
hdfs=Hello HDFSService
local=Hello LocalService
可以看到ServiceLoader可以根据IService把定义的两个实现类找出来,返回一个ServiceLoader的实现,而ServiceLoader实现了Iterable接口,所以可以通过ServiceLoader来遍历所有在配置文件中定义的类的实例