博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java服务发现_服务发现 —— ServiceLoader
阅读量:5300 次
发布时间:2019-06-14

本文共 864 字,大约阅读时间需要 2 分钟。

在java开发中,有一些这样的场景:

项目中加入了某些jar包,编译时也没有错,但运行时就报错了,

找不到类——这其实就涉及到java中面向接口编程。

大家都知道面向接口开发有很多好处,特别是在java中要实现回调这样的功能,

你还必须使用接口。面向接口开发中涉及两个要部分:接口(定义)和接口的实现,

在有些情况下,接口的定义与实现并不在同一个项目中,或者接口定义方跟实现方式分属不同组织,

这时候我们要使用这一类接口所拥有的功能时,就需要加入两部分依赖:接口定义部分jar包及

该接口的实现jar包,这就是开始提出问题的答案。

其实java开发中这样的场景比较多:JDBC、JPA、JMS、WebSocket等都是接口定义方与实现方分离,

不属于同一个组织,java方一般都是规范的定义者。

开发中经常遇到这样的事,但是你有没有问过自己:定义接口的jar包与实现jar包加入项目后,

java在运行时是如何将二者关联起来的,他怎么知道谁是谁的实现呢?

有人可能说这还不简单,直接将所有项目jar包扫描一遍不就知道了!?

没错,这办法行得通,但是想想都觉得麻烦,效率不高,其实java研发者在1.6的时候就加入了

一个实现这种需求的类——ServiceLoader,这就是服务发现功能。

服务发现功能约定:

1、服务实现方必须在自己提供的jar包中的META-INF目录下放置一个目录,

名字就叫services

2、在services目录下放置服务接口类与实现类的关系文件,该文件要求:

a、文件的名字是被实现的接口的全路径名(如:a.b.c.IHeHe),文件没有后缀,

每个文件代表一个接口。

b、文件内容是该文件名字所代表的接口的实现类的全路径名

(如:x.y.x.HaHa ,HaHa实现了IHeHe接口),

如果该接口有多个实现类,则每个实现类占一行。

这里给一个小的demo,借用一下网友的例子:

http://blog.csdn.net/is_zhoufeng/article/details/50722440

你可能感兴趣的文章
两两组合算法-递归实现方法
查看>>
python中time模块
查看>>
JavaWeb学习笔记(3)
查看>>
StreamAPI 小练习
查看>>
进程关系之作业控制
查看>>
项目经理的磨练(2) 科学的安排项目日程安排
查看>>
mysql优化二之锁机制
查看>>
从程序员到项目经理(14):项目经理必须懂一点“章法”【转载】
查看>>
JDBC批量插入优化addbatch
查看>>
复现一篇深度强化学习论文之前请先看了这篇文章!
查看>>
git 命令使用常见问题
查看>>
android加固系列—6.仿爱加密等第三方加固平台之动态加载dex防止apk被反编译
查看>>
Linux命令----ls
查看>>
WebRTC网关服务器单端口方案实现
查看>>
表达式的前后缀表达形式
查看>>
HTTP协议
查看>>
Django 学生信息 添加 功能 遇到的问题.
查看>>
Merge Sorted Array Leetcode Java and C++
查看>>
网络棋牌游戏服务器架构
查看>>
BestCoder Round #86 部分题解
查看>>