认识serviceLoader
最近在研究系统设计方面的东西,发现有很多通用的解决方案,包括spring配置扩展以及serviceLoader的应用,这里简单记录下serviceLoader的简单应用,网上例子很多,大同小异,本人觉得最主要的是能懂得思想,运用到系统设计之中
基本代码结构是这样的

首先定义服务接口
package com.mandy.ServiceLocaterTest1;
public interface IMyService {
public void showService();
}
再来定义它的实现类
package com.mandy.ServiceLocaterTest1;
public class MyService1 implements IMyService {
public void showService() {
System.out.println("MyService1 MyService1 MyService1");
}
}
package com.mandy.ServiceLocaterTest1;
public class MyService2 implements IMyService {
public void showService() {
System.out.println("MyService2 MyService2 MyService2");
}
}
配置META-INF/services/com.mandy.IServiceLocaterTest1.IMyService
com.mandy.ServiceLocaterTest1.MyService1
com.mandy.ServiceLocaterTest1.MyService2
测试下:
package com.mandy.ServiceLocaterTest1;
import java.util.ServiceLoader;
public class TestMain {
public static void main(String[] args) {
ServiceLoader<IMyService> serviceLoader = ServiceLoader.load(IMyService.class);
for (IMyService service : serviceLoader) {
service.showService();
}
}
}
结果:
MyService1 MyService1 MyService1
MyService2 MyService2 MyService2
可以通过ServiceLoader和配置加载并遍历服务实例
认识serviceLoader的更多相关文章
- ServiceLoader的使用
ServiceLoader与ClassLoader是Java中2个即相互区别又相互联系的加载器.JVM利用ClassLoader将类载入内存,这是一个类声明周期的第一步(一个java类的完整的生命周期 ...
- Dubbo源码学习--环境搭建及基础准备(ServiceLoader、ExtensionLoader)
环境搭建 Github上下载Dubbo最新发布版本,楼主下载版本为2.5.7. cd到源码解压目录,maven编译,命令为: mvn clean install -Dmaven.test.skip 生 ...
- java.util.ServiceLoader使用
近期在项目中需要实现能在配置文件中定义多个统一接口类型的类,可以在程序中获取到所有配置的类,刚开始打算配置到properties中,然后去程序读取,感觉这种方式不太灵活,于是,研究研究java中有没有 ...
- ServiceLoader详解
系统中用到了ServiceLoader,查了一下: ServiceLoader与ClassLoader是Java中2个即相互区别又相互联系的加载器.JVM利用ClassLoader将类载入内存,这是一 ...
- Java ServiceLoader(SPI)学习
1. 几个不错的关于ServiceLoader的文章,大家可以先参考一下 1) http://www.myexception.cn/program/1355384.html 这篇的后面的问题分析不错 ...
- 【java编程】ServiceLoader使用看这一篇就够了
转载:https://www.jianshu.com/p/7601ba434ff4 想必大家多多少少听过spi,具体的解释我就不多说了.但是它具体是怎么实现的呢?它的原理是什么呢?下面我就围绕这两个问 ...
- ServiceLoader
先从业务场景分析,要完成数据的分析处理功能.根据数据的不同种类,先调用groovy或者python脚本等中的一种处理数据,处理完数据的后需要流程相同. 要支持处理能力的动态扩展,也就是框架完成后,可以 ...
- Java之ServiceLoader
转载请注明源出处:http://www.cnblogs.com/lighten/p/6946683.html 1.简介 JDK1.6之后,java.util包下多了一个类ServiceLoader,其 ...
- java.util.ServiceLoader的用法
在很多开源组件里经常会看到java.util.ServiceLoader的使用,这里给大家介绍下怎么通过ServiceLoader找到一个接口的所有实现类. 我们新建一个接口Hello public ...
随机推荐
- 【转】每天一个linux命令(2):cd命令
原文网址:http://www.cnblogs.com/peida/archive/2012/10/24/2736501.html Linux cd 命令可以说是Linux中最基本的命令语句,其他的命 ...
- vue 知识点
Vue 中的 slot: 概念:槽/slot是组件在模板中为调用者预留的位置,使用<slot>元素声明一个 槽.在最终的视图中,调用者模板中被调用组件的内容,将填充<slot> ...
- 【android】Android ADB 端口占用问题解决方案
解决ADB端口占用问题 方式一5037为adb默认端口,若5037端口被占用,查看占用端口的进程PIDC:\Users\wwx229495>netstat -aon|findstr 5037 ...
- linux 信号处理 六(全)
一.信号及信号来源 信号本质 信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的.信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实 ...
- PHP简单查询界面
<html> <style type='text/css'> table {border-collapse:collapse;} td {border:solid 1px #d ...
- CMake Error: Curses library not found. Please install appropriate package
编译安装MySQL的时候,出现错误: -- Could NOT find Curses (missing: CURSES_LIBRARY CURSES_INCLUDE_PATH) CMake Err ...
- 技巧:利用putty通过win7访问ubuntu
.用apt-get直接安装SSHD服务所需相关软件包: sudo apt-get install openssh-server .开启服务: sudo /etc/init.d/sshd start p ...
- configure: error: You need a C++ compiler for C++ support.
安装pcre包的时候提示缺少c++编译器 报错信息如下: configure: error: You need a C++ compiler for C++ support. 解决办法,使用yum安装 ...
- FileSync plugin for Eclipse 安装注意事项 Eclipse文件同步插件
习惯了使用MyEclipse,各种插件不用自己安装,觉得开发起来很方便,现在大家都用Eclipse了,还有不用Eclipse用更高级的,IT当然开发大型项目没人用UltraEdit吧,虽然是一个不错的 ...
- Linux命令详解-用户管理
1. 用户管理 1.Linux用户管理 linux有三类用户: (1.)超级用户 : root用户具有操作系统的一切权限 uid=0 (2.)普通用户: 具有操作系统有限的权限 uid=500-60 ...