java ServiceLoader

来源:互联网 发布:画网格软件 编辑:程序博客网 时间:2024/05/16 18:08

下面以一个具体的例子来说明一下ServiceLoader的具体使用,类似Hadoop FileSystem中的实现。

首先定义一个接口,具体如下:

public interface IService {     public String sayHello();          public String getScheme(); } 


该接口有两个子类,分别为HDFSService和LocalService:

public class HDFSService implements IService {      @Override     public String sayHello() {         return "Hello HDFS!!";     }      @Override     public String getScheme() {         return "hdfs";     } } 


 

public class LocalService implements IService {      @Override     public String sayHello() {         return "Hello Local!!";     }      @Override     public String getScheme() {         return "local";     }  } 


需要在META-INF/services下以IService这个类的全名来新建立一个文件,文件中的内容为两个实现类的全名,如下:

org.hadoop.java.HDFSService 
org.hadoop.java.LocalService 

所有的实现和配置都已经完成,下面写一个测试类来看一下结果:

public class ServiceLoaderTest {      /**    * @param args    */     public static void main(String[] args) {         //need to define related class full name in /META-INF/services/....         ServiceLoader<IService> serviceLoader = ServiceLoader                 .load(IService.class);         for (IService service : serviceLoader) {             System.out.println(service.getScheme()+"="+service.sayHello());         }     }  } 


原创粉丝点击