开普云JAVA开发_【JAVA】使用Java SPI ServiceLoader进行Java应用插件模块化开发

背景:在进行业务定制时需要考虑不同接口的服务实现,每个局点所要求的接口大体都不一致,要求接口服务能够插件化方式提供;

方案分析:

1)采用OSGI框架进行开发,但是考虑到OSGI的框架太重,需要引入的东西比较多,放弃了该方案;

2)采用Java class loader动态加载外部jar机制,动态加载定制的接口服务类,这种方式实现比较复杂,需要完成指定接口服务类的文件加载,同时需要能查找到所有接口服务类,作为备选方案;

3)使用java service provider interface(SPI)机制构建插件化java应用框架,不需要引入新的外部框架,实现也简单,最为优选方案

下面描述使用Java SPI如何实现插件化服务框架开发过程:

1)创建接口服务工程SPI-Service,该工程提供了服务的接口类或抽象类,所有定制的接口服务类都实现或继承该接口完成业务的定制;

2)创建接口实现服务工程SPI-CN-Service,该工程提供了服务接口的定制实现类;该工程导出为jar文件时需要将META-INF目录及其包含的文件都包含在jar文件中;

3)创建接口服务测试工程SPI-Service-Client,该工程提供了如何根据SPI ServiceLoader机制调用定制的服务;

该工程需要将1)和2)步骤创建的工程打包为jar文件添加到该工程的classpath中

4)工程示意图

5667c2eb5decd08345d68f7bacc5aa16.png

5) ITimeService.javapackage hxb.spi.service;

public abstract class ITimeService {

private String serviceName;

public abstract String getCurrentTime();

public String getServiceName() {

return serviceName;

}

public void setServiceName(String serviceName) {

this.serviceName = serviceName;

}

}

6)CNTimeService.javapackage hxb.spi.service;

import java.text.SimpleDateFormat;

import java.util.Date;

public class CNTimeService extends ITimeService {

public CNTimeService()

{

super.setServiceName("CN-Time-Service");

}

@Override

public String getCurrentTime() {

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

return getServiceName()+":"+sdf.format(new Date());

}

}

7) USTimeService.javapackage hxb.spi.service;

import java.text.SimpleDateFormat;

import java.util.Date;

public class USTimeService extends ITimeService {

public USTimeService()

{

super.setServiceName("US-Time-Service");

}

@Override

public String getCurrentTime() {

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");

return getServiceName()+":"+sdf.format(new Date());

}

}

8) META-INF/services/hxb.spi.service.ITimeService文件hxb.spi.service.CNTimeService

hxb.spi.service.USTimeServ

9)测试类SPIClient.javapackage hxb.spi.test;

import hxb.spi.service.ITimeService;

import java.util.ServiceLoader;

public class SPIClient {

public static void main(String[] args) {

ServiceLoader sloader = ServiceLoader.load(ITimeService.class);

for (ITimeService iTimeService : sloader) {

System.out.println(iTimeService.getCurrentTime());

}

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/41408.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开普用的oracle管理工具,Oracle常用管理工具及其入门

Oracle常用管理工具及其入门 (2012-06-11 14:50:14) 标签: it (一)Oracle Universal Installer 1.用于安装、升级或删除软件组建、还用于创建数据库 2.基于Java引擎 3.具有一下特性 自动的相关性解析 可以进行基于Web的安装 跟踪组件和套件安装的清单 可卸载已安装的…

一卡通充值系统c语言,一卡通充值,一卡通充值中心,一卡通充值系统,一卡通充值转账系统 - 新开普(NewCapec)...

一卡通充值转账系统 1. 企业卡充值转账系统的特点 系统提供POS充值、软件充值、银行自助圈存充值、批量转账等充值方式。 所有充值操作,全部采用联网模式在线操作,以确保安全。 充值操作操作权限划分清晰,责任明确,只允许被授权的…

html学生信息处理,宿舍管理系统,学生宿舍管理,学生宿舍管理信息系统,学生宿舍管理系统 - 新开普(NewCapec)...

学生宿舍管理系统 正普数字化校园宿舍管理系统是为学校宿管科老师方便管理学生住宿情况设计的信息管理系统,通过宿舍管理系统可实时掌握学校公寓使用情况、每个公寓楼房间住宿情况、全校学生住宿情况、每个学生住宿详细信息等等。它是基于网络的B/S结构程序&#xf…

高校人事管理系统oracle,人事信息管理,人事管理系统,人事管理系统软件,人事信息管理系统 - 新开普(NewCapec)...

人事信息管理系统 正普数字化校园人事信息管理系统主要是实现高校教职工相关信息的统一管理,各种手续办理流程的统一管理。采用数据仓库技术、分布式信息处理技术构建,运行于校园网络环境下,符合有关国家标准、教育部标准、行业标准&#xff…

计算机学院副书记谈学工管理系统登录,学工管理信息系统,学工系统,学工管理系统 - 新开普(NewCapec)...

学工管理系统 数字化校园学生学工管理系统涵盖高校学生在校活动的所有环节,包括思想教育、评优评先、课外赛事、勤工助学、心理指导、违纪处分、保险管理、社团活动、社会工作、学生就业、军训管理、系统管理、用户管理等等功能模块。系统是基于校园网/互联网的浏览…

人事考勤系统服务器端,考勤管理,考勤管理系统,人事考勤管理系统,考勤系统 - 新开普(NewCapec)...

考勤系统 人事考勤管理系统主要包括:参数设置、设备管理、人员管理、日常操作、报表查询五个模块。具有灵活的考勤规则设置、强大的排班功能、丰富的报表数据,分为B/S版和C/S版两种,可以分别满足大中型、小型企事业单位的需要。 考勤管理系统…

新开普实习 UI设计初体验

清明节前的十天,我们学校组织参加了新开普的实习,实习时间是十天,我选的项目是UI设计,在此处做一下每天所做和感受的记录: 2018.3/27 学习内容:APP应用图标,ios应用图标规范,ios安…

云南新开普智慧校园一卡通解决方案,K12智慧校园信息化建设解决方案

一、数字化建设是未来校园的建设核心 信息化2.0行动计划 在2022年落实“三全两高一大” 构建互联网教育大平台 数字化建设首要目标即校园安全 校园安全涵盖教学安全、食品安全、 生活饮食安全、交通安全等方面 二、K12智慧校园介绍 数字化的生活方式,让师生…

新开普生产实习【智能家居灯控系统】

文章目录 Java学习第一天下午:Java基础语法1、输出2、标识符3、常量 变量4、显示一个界面5、显示一个弹窗6、运算符7、流程控制语句8、循环♻️9、Day1 小作业 Java基础语言第二天上午1、Java中类的定义2、成员变量的定义3、成员方法的声明4、类的使用5、方法的重载…

云南新开普一脸通解决方案、医院智慧餐饮一卡通、高校一脸通解决方案

一、行业现状 缺乏统一规划 需要多次开卡 园区门禁、楼宇门禁、宿舍门锁多个厂家,系统独立运行,需要员工在使用是逐个开通,没有统一规划。 应用相互独立 信息孤岛严重 ERP系统、OA办公系统、员工异动与一卡通系统,无法联动&am…

某开源管理平台越权访问漏洞复现

越权访问漏洞复现 某开源的管理平台,该漏洞可导致普通用户越权访问调用管理员的API。 影响范围 v1.6.1 漏洞复现 靶机ip:192.168.1.9 登录地址: http://192.168.1.9:8080/#/login先注册个号 用户名:tpaerhack.com 密码:123qwert回到登录页面进行…

新开普自助查询 单点登录 php,综合教务管理系统,高校教务管理系统,教务管理系统 - 新开普(NewCapec)...

教务管理系统 实施数字化校园下的一卡通系统,为客户提供全面的信息化解决方案,保护客户原有系统投资,需要接入许多第三方应用系统,如图书馆管理系统、教务管理系统、学校医疗管理系统、网络计费系统、资产管理系统、学校人事管理系…

借助TeeChart 图表控件,这家公司轻松创建了可视化图表看板

TeeChart for .NET是优秀的工业4.0 WinForm图表控件,官方独家授权汉化,集功能全面、性能稳定、价格实惠等优势于一体。TeeChart for .NET 中文版还可让您在使用和学习上没有任何语言障碍,至少可以节省30%的开发时间。技术交流Qqun&#xff1a…

合并报表口诀_《中级会计实务》合并报表学不会?据说把他的讲义抄6遍就能过!...

中级会计实务是中级会计职称三科考试中最难的一科,需要考生分配较多的时间来学习钻研,尤其是其中的长投、合并报表和所得税,不知道有多少考生没有翻过这三座大山。 但是网校的高志谦和郭建华老师可是这方面的高手,他们不仅把知识点…

chatgpt赋能python:Python软件快捷键大集合

Python软件快捷键大集合 作为一门流行的脚本语言,Python在软件开发、数据分析、科学研究等领域都有广泛应用。Python的简洁、高效、易学易用一直是广大用户的着重点。本篇文章将为大家介绍Python软件中的快捷键,以提高编程效率和实现各种操作。 常用快…

危!AI调包侠,命将不久!ChatGPT将取而代之!HuggingGPT给出警告!

丰色 发自 凹非寺 量子位 | 公众号 QbitAI HuggingFaceChatGPT ——HuggingGPT,它来了! 只要给定一个AI任务,例如“下面这张图片里有什么动物,每种有几只”。 它就能帮你自动分析需要哪些AI模型,然后直接去调用Huggin…

LLM Data Pipelines: 解析大语言模型训练数据集处理的复杂流程

编者按:在训练大语言模型的过程中,构建高质量的训练数据集是非常关键的一步,但关于构建大模型训练所需数据集的通用数据处理流程(Data pipelines)的相关资料极为稀少。 本文主要介绍了基于Common Crawl数据集的数据处理流程。首先,文章概述了…

做好韩语同声传译,译员需要具备这些能力!

我们知道,同声传译是口译的高级形式,难度比较大,对译员的综合能力要求非常高。那么,针对同声传译的韩语翻译,译员需要具备什么条件,如何翻译效果比较好? 据了解,韩语同声传译是一项高…

爆火的AIGC到底是一片新蓝海,还是又一次的泡沫?

自ChatGPT发布以来,陷入了AIGC热,无论是大众的讨论、资本的流向还是大厂的加入,AIGC似乎都会是未来几年内最火的新蓝海。 不同于以往的“顶尖科技”泡沫,AIGC是真正可以应用到生活中的,这也是为何它会引发大量“失业论…

Midjourney之logo设计

Midjourney之logo设计 8 小时前 ChatGPT云炬学长 ​关注 Midjourney不仅可以生成日常生活中的各类图像,它在垂直专业领域的运用同样强大与灵活。 本节课程,我们将聚焦Midjourney在logo设计领域的用法,手把手教大家如何让Midjourney为你打造专属的logo 说到logo,那必定是无…