博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中的SPI的使用例子
阅读量:4039 次
发布时间:2019-05-24

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

首先,看一下总体的结构图:

在这里插入图片描述

在src的main中,我们定义了com.lf这样一个路径,下面有两个包,首先我们看一下API包中,我们定义了一个接口MyPrinterAPI

package com.lf;import com.lf.API.MyPrinterAPI;import java.util.ServiceLoader;public class testClient {
public static void main(String[] args) {
ServiceLoader
printers = ServiceLoader.load(MyPrinterAPI.class);// System.out.println(printers); for (MyPrinterAPI printer : printers) {
printer.sayHello("SPI"); } }}

然后,在impl包下定义了两个这个接口的实现–MyPrinterAMyPrinterB,(C是一个对比,并没有实现接口),其代码如下:

// MyPrinterA.javapackage com.lf.impl;import com.lf.API.MyPrinterAPI;public class MyPrinterA implements MyPrinterAPI {
@Override public String sayHello(String str) {
String res = "This is printer A!\nHello " + str; System.out.println(res); return res; }}
// MyPrinterB.javapackage com.lf.impl;import com.lf.API.MyPrinterAPI;public class MyPrinterB implements MyPrinterAPI {
@Override public String sayHello(String str) {
String res = "This is printer B!\nHello " + str; System.out.println(res); return res; }}

在完成了这三个java文件后,我们在resources文件夹下创建META-INF/services这样的文件夹路径,然后在services文件夹下创建一个文件com.lf.API.MyPrinterAPI,可以看到,这个文件的即为我们所定义的接口MyPrinterAPI的全限定名。

之后,我们在这个文件下写入:

com.lf.impl.MyPrinterAcom.lf.impl.MyPrinterB

(上图中,我的IDE在我写入时是有提示A与B的,但是没有C,因为C没有实现接口)

以上步骤完成后,我们就可以开始我们的测试了。

我们在com.lf下创建一个测试文件testClient,在里面写入main函数作为测试的入口:

// testClient.javapackage com.lf;import com.lf.API.MyPrinterAPI;import java.util.ServiceLoader;public class testClient {
public static void main(String[] args) {
ServiceLoader
printers = ServiceLoader.load(MyPrinterAPI.class); for (MyPrinterAPI printer : printers) {
printer.sayHello("SPI"); } }}

运行结果:

This is printer A!Hello SPIThis is printer B!Hello SPI

可以看到成功地调用了我们所写的两个实现类。

转载地址:http://umsdi.baihongyu.com/

你可能感兴趣的文章
GNU hello代码分析
查看>>
Qt继电器控制板代码
查看>>
wpa_supplicant控制脚本
查看>>
gstreamer相关工具集合
查看>>
arm 自动升级脚本
查看>>
RS232 四入四出模块控制代码
查看>>
gstreamer插件之 videotestsrc
查看>>
autoupdate script
查看>>
linux 驱动开发 头文件
查看>>
/etc/resolv.conf
查看>>
container_of()传入结构体中的成员,返回该结构体的首地址
查看>>
linux sfdisk partition
查看>>
ipconfig,ifconfig,iwconfig
查看>>
opensuse12.2 PL2303 minicom
查看>>
网络视频服务器移植
查看>>
Encoding Schemes
查看>>
移植QT
查看>>
如此调用
查看>>
计算机的发展史
查看>>
带WiringPi库的交叉编译如何处理一
查看>>