这个类是jdk1.6版本给出的类,它也是对对象初始化的一种实现方式。这样用户就不需要显示的通过new 去创建对象了。
使用方式:
1、定义接口;
2、定义接口的实现类;
3、在/META-INF/services/ 命名文件,以接口全路径命名,文件里放接口的具体实现类的全路径,多个实现类,可放多个。
4、Demo
4.1 首相创建一个接口
package com.apollo.client.java;
public interface ServiceInterface {
}
4.2 创建接口的实现类:
package com.apollo.client.java;
public class ServiceI implements ServiceInterface{
}
4.3 在/META-INF/services/ 下新建文件
文件名是接口的全路径名: com.apollo.client.java.ServiceInterface
文件里是各个实现类的全路径名:com.apollo.client.java.ServiceI
4.4 编写测试类:
package com.apollo.client.java;
import java.util.Iterator;
import java.util.ServiceLoader;
public class ServiceLoaderTest {
public static void main(String[] args) {
//1、加载src/main/resources/META-INF/servcies包下以接口ServiceInterface全路径命名的文件;
ServiceLoader<ServiceInterface> loader = ServiceLoader.load(ServiceInterface.class);
//2、获取文件里的内容(接口ServiceInterface的实现类的全路径)
Iterator<ServiceInterface> sdIterator = loader.iterator();
//3、遍历所有实现类的对象
while(sdIterator.hasNext()){
System.out.println(sdIterator.next());
}
}
}
这样就可以创建接口的各个实现类,实际业务代码很少这样用,因为我们使用工厂方法完全可以替代上面创卷对象的方式.
在apollo源码中使用到这个知识点去创建对象。