java基础-ServiceLoader

前言

​ 今天在看Vert.x源码的时候,一直没找到创建vertx对象时在哪走的实现类的构造方法。后来深入进去看到一些ServiceLoader的东西,查阅资料才知道,这是一种类似Spring依赖注入的类的初始化方式,在很多知名框架都用到,对于阅读源码还是很有帮助作用的。比如:Hadoop。

接口代码

1
2
3
4
5
6
7
8
package myInterface.ServiceLoader;
/**
* Created by yuhang on 2016/12/5.
*/
public interface MyInterface {
void handle();
}

实现类代码

1
2
3
4
5
6
7
8
9
10
11
12
13
package myInterface.ServiceLoader.impl;
import myInterface.ServiceLoader.MyInterface;
/**
* Created by yuhang on 2016/12/5.
*/
public class MyImpl_1 implements MyInterface {
@Override
public void handle() {
System.out.println("MyImpl_2.handle()");
}
}

再照着上面写一个MyImpl_2,同样是实现MyInterface接口。

测试类代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import myInterface.ServiceLoader.MyInterface;
import java.util.ServiceLoader;
/**
* Created by yuhang on 2016/12/5.
*/
public class ServiceLoderTest {
/**
* @param args
*/
public static void main(String[] args) {
//need to define related class full name in /META-INF/services/....
ServiceLoader<MyInterface> serviceLoader = ServiceLoader
.load(MyInterface.class);
for (MyInterface service : serviceLoader) {
service.handle();
}
}
}

配置文件

1
2
myInterface.ServiceLoader.impl.MyImpl_1
myInterface.ServiceLoader.impl.MyImpl_2

结构层次图

第一次截图有点丑,凑合看下。

坚持原创技术分享,您的支持将鼓励我继续创作!

热评文章