在不少開源組件裏常常會看到java.util.ServiceLoader的使用,這裏給你們介紹下怎麼經過ServiceLoader找到一個接口的全部實現類。java
咱們新建一個接口Helloide
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遍歷。it