文章目录
- 什么是SPI:
- 为什么要用:
- 怎么用:
- 有没有例子:
什么是SPI:
全称是Service Provider Interface,是Java提供的服务发现接口
为什么要用:
体现面向接口编程,用于松耦合设计
怎么用:
关键词ServiceLoader.load
有没有例子:
JDBC驱动自动发现机制就使用的SPI原理。请看DriverManager
步骤:
1、启动类加载器(bootstrapClassLoader)加载DriverManager类
2、在静态方法中执行loadInitialDrivers方法
3、加载注册驱动
private static void loadInitialDrivers() {
String drivers;
try {
// 1、首先加载属性【jdbc.drivers】指定的驱动
drivers = AccessController.doPrivileged(new PrivilegedAction<String>() {
public String run() {
return System.getProperty("jdbc.drivers");
}
});
} catch (Exception ex) {
drivers = null;
}
AccessController.doPrivileged(new PrivilegedAction<Void>() {
public Void run() {
// 2、使用SPI机制加载Driver.class接口的实现类定义的驱动
ServiceLoader<Driver> loadedDrivers = ServiceLoader.load(Driver.class);
Iterator<Driver> driversIterator = loadedDrivers.iterator();
try{
while(driversIterator.hasNext()) {
driversIterator.next();
}
} catch(Throwable t) {
// Do nothing
}
return null;
}
});
传送门:保姆式Spring5源码解析
欢迎与作者一起交流技术和工作生活