首先是接口
/**
* 账号状态检测链路
*/
public interface AccountStatusCheckChain {
void next(Long userId);
}
方法1:使用Spring自带的方法
Application.getBeansOfType();
Spring作为一个容器,管理着一个项目中所有经过配置的Java类(xml配置文件或Annotation方式)。如果某个接口的所有实现类均被Spring托管了,那么通过Spring就可以很简单的返回这些实现类。
public void get() {
Map<String, AccountStatusCheckChain> beans = applicationContext.getBeansOfType(AccountStatusCheckChain.class);
beans.forEach((beanName, bean) -> {
// 执行实现类的方法
bean.next(1L);
}
);
}
方法2使用JDK自带的ServiceLoader实现
ServiceLoader是JDK自带的一个类加载器,位于java.util包当中,作为 A simple service-provider loading facility.
使用方法:
具体使用:
1.在META-INF/services/目录下用你的接口全路径名称命名一个文件(不加后缀),然后在该文件中一行一个添加你的接口实现类的全路径名。
![在这里插入图片描述](https://img-blog.csdnimg.cn/60bd9b17babb411b8bfbaffec2c4cf63.png
2.通过load方法来加载出所有的接口实现类:load方法的返回值是一个迭代器,用这个迭代器可以遍历出所有的接口实现类
public static void main(String[] args) {
ServiceLoader<AccountStatusCheckChain> load = ServiceLoader.load(AccountStatusCheckChain.class);
System.out.println(load);
load.forEach(
chain -> {
// 实现类
chain.next(1L);
}
);
}