mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-07-21 15:09:48 +08:00
add ServiceLoader
This commit is contained in:
@@ -12,6 +12,7 @@
|
|||||||
* 【core 】 增加ValueListHandler,优化结果集获取方式
|
* 【core 】 增加ValueListHandler,优化结果集获取方式
|
||||||
* 【http 】 支持patch方法(issue#666@Github)
|
* 【http 】 支持patch方法(issue#666@Github)
|
||||||
* 【crypto】 BCUtil支持更加灵活的密钥类型,增加writePemObject方法
|
* 【crypto】 BCUtil支持更加灵活的密钥类型,增加writePemObject方法
|
||||||
|
* 【core 】 增加ServiceLoaderUtil
|
||||||
|
|
||||||
### Bug修复
|
### Bug修复
|
||||||
|
|
||||||
|
@@ -0,0 +1,58 @@
|
|||||||
|
package cn.hutool.core.util;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.ServiceLoader;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SPI机制中的服务加载工具类,流程如下
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* 1、创建接口,并创建实现类
|
||||||
|
* 2、ClassPath/META-INF/services下创建与接口全限定类名相同的文件
|
||||||
|
* 3、文件内容填写实现类的全限定类名
|
||||||
|
* </pre>
|
||||||
|
* 相关介绍见:https://www.jianshu.com/p/3a3edbcd8f24
|
||||||
|
*
|
||||||
|
* @author looly
|
||||||
|
* @since 5.1.6
|
||||||
|
*/
|
||||||
|
public class ServiceLoaderUtil {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 加载第一个服务,如果用户定义了多个接口实现类,只获取第一个。
|
||||||
|
*
|
||||||
|
* @param <T> 接口类型
|
||||||
|
* @param clazz 服务接口
|
||||||
|
* @return 第一个服务接口实现对象,无实现返回{@code null}
|
||||||
|
*/
|
||||||
|
public static <T> T loadFirst(Class<T> clazz) {
|
||||||
|
final Iterator<T> iterator = load(clazz).iterator();
|
||||||
|
if(iterator.hasNext()){
|
||||||
|
return iterator.next();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 加载服务
|
||||||
|
*
|
||||||
|
* @param <T> 接口类型
|
||||||
|
* @param clazz 服务接口
|
||||||
|
* @return 服务接口实现列表
|
||||||
|
*/
|
||||||
|
public static <T> ServiceLoader<T> load(Class<T> clazz) {
|
||||||
|
return ServiceLoader.load(clazz);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 加载服务
|
||||||
|
*
|
||||||
|
* @param <T> 接口类型
|
||||||
|
* @param clazz 服务接口
|
||||||
|
* @param loader {@link ClassLoader}
|
||||||
|
* @return 服务接口实现列表
|
||||||
|
*/
|
||||||
|
public static <T> ServiceLoader<T> load(Class<T> clazz, ClassLoader loader) {
|
||||||
|
return ServiceLoader.load(clazz, loader);
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user