JAVA SPI特性及简单应用代码实例
最近在研究dubbo时,发现了JAVA的SPI特性。SPI的全名为Service Provider Interface,是JDK内置的一种服务发现机制。
具体实现:
1、定义一个接口
public interface IShape { /** * 渲染 */ void render(); }
2、添加几种实现
public class CircularShape implements IShape { @Override public void render() { System.out.println(this.getClass().getName() + "正在绘制圆形"); } }
public class SquareShape implements IShape { @Override public void render() { System.out.println(this.getClass().getName() + "正在绘制正方形"); } }
3、在META-INF/services/com.zhi.demo.IShape文件添加信息
com.zhi.demo.impl.SquareShape
com.zhi.demo.impl.CircularShape
4、测试
public class SpiTest { public static void main(String[] args) { ServiceLoader<IShape> loaders = ServiceLoader.load(IShape.class); for (IShape shape : loaders) { shape.render(); } } }
5、运行结果
com.zhi.demo.impl.SquareShape正在绘制正方形
com.zhi.demo.impl.CircularShape正在绘制圆形
代码结构图如下
6、实际应用,sum为各大数据厂商提供了java.sql.Driver接口,每个厂商提供自己的实现。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
Java的SPI机制实例详解
Java的SPI机制实例详解 SPI的全名为Service Provider Interface.普通开发人员可能不熟悉,因为这个是针对厂商或者插件的.在java.util.ServiceLoader的文档里有比较详细的介绍.究其思想,其实是和"Callback"差不多."Callback"的思想是在我们调用API的时候,我们可以自己写一段逻辑代码,传入到API里面,API内部在合适的时候会调用它,从而实现某种程度的"定制". 典型的是Colle
-
Java SPI 机制知识点总结
前言 不知大家现在有没有去公司复工,我已经在家办公将近 3 周了,同时也在家呆了一个多月:还好工作并没有受到任何影响,我个人一直觉得远程工作和 IT 行业是非常契合的,这段时间的工作效率甚至比在办公室还高,同时由于我们公司的业务在海外,所以疫情几乎没有造成太多影响. 扯远了,这次主要是想和大家分享一下 Java 的 SPI 机制. 还没看过的朋友的我先做个前景提要,当时的需求: 我实现了一个类似于的 SpringMVC 但却很轻量的 http 框架 cicada,其中当然也需要一个 IOC 容器
-
Java利用Sping框架编写RPC远程过程调用服务的教程
RPC,即 Remote Procedure Call(远程过程调用),说得通俗一点就是:调用远程计算机上的服务,就像调用本地服务一样. RPC 可基于 HTTP 或 TCP 协议,Web Service 就是基于 HTTP 协议的 RPC,它具有良好的跨平台性,但其性能却不如基于 TCP 协议的 RPC.会两方面会直接影响 RPC 的性能,一是传输方式,二是序列化. 众所周知,TCP 是传输层协议,HTTP 是应用层协议,而传输层较应用层更加底层,在数据传输方面,越底层越快,因此,在一般情况下
-
Android下拉列表(Spinner)效果(使用C#和Java分别实现)
效果如下: C#实现代码 using Android.App; using Android.OS; using Android.Widget; namespace SpinnerDemo { [Activity(Label = "@string/ApplicationName", MainLauncher = true, Icon = "@drawable/icon")] public class MainActivity : Activity { private
-
如何通过Maven仓库安装Spire系列的Java产品
前言 Spire系列库中已发布的Java产品目前有三个,即Spire.PDF for Java.Spire.Presentation for Java.Spire.Barcode for Java.使用该Java产品,除了可以从官网:https://www.e-iceblue.cn/Downloads.html下载,也可以通过Maven来安装使用.本教程中,以通过Maven安装Spire.PDF for Java为例介绍具体安装方法和步骤. 首先,在pom.xml文件中配置Maven仓库路径.
-
深入学习Java中的SPI机制
概述 SPI(Service Provider Interface),是JDK内置的一种服务提供发现机制,可以用来启用框架扩展和替换组件,主要是被框架的开发人员使用,比如java.sql.Driver接口,其他不同厂商可以针对同一接口做出不同的实现,MySQL和PostgreSQL都有不同的实现提供给用户,而Java的SPI机制可以为某个接口寻找服务实现. Java中SPI机制主要思想是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要,其核心思想就是解耦. SPI整体机制图如下 当服务
-
JAVA SPI特性及简单应用代码实例
最近在研究dubbo时,发现了JAVA的SPI特性.SPI的全名为Service Provider Interface,是JDK内置的一种服务发现机制. 具体实现: 1.定义一个接口 public interface IShape { /** * 渲染 */ void render(); } 2.添加几种实现 public class CircularShape implements IShape { @Override public void render() { System.out.pri
-
java中stack(栈)的使用代码实例
java中stack类继承于vector,其特性为后进先出(lastinfirstout). 入栈和出栈实例图: 实例图的java代码实例: package com.lanhuigu.java.ListTest; import java.util.Stack; public class StackTest { public static void main(String[] args) { Stack<String> staffs = new Stack<String>(); //
-
Vue请求java服务端并返回数据代码实例
这篇文章主要介绍了Vue请求java服务端并返回数据代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 最近在自学vue怎么与java进行数据交互.其实axios还是挺简单的,与ajax请求几乎一样,无外乎也就是要解决下跨域的问题. 废话不多说了,直接贴代码,一看就懂! //向springmvc Controller发起请求,传递一个参数 get请求(带参数传递) axios.get('http://127.0.0.1:8088/inas/
-
Java中io流解析及代码实例
IO流 Java中IO流分为两种,字节流和字符流,顾名思义字节流就是按照字节来读取和写入的,字符刘是按照字符来存取的:常用的文件读取用的就是字符流,在网络通信里面用的就是字节流 下面这张图是Java中IO流的总体框架: 字节流 Java中字节流一般都是以stream结尾的,输入的字节流叫InputStream,输出字节流叫OutputStream;InputStream和OutputStream是表示自己输入/输出的所有类的超类,是抽象类(abstract) 常用的字节流有: 1.FileInp
-
java获取当前时间并格式化代码实例
这篇文章主要介绍了java获取当前时间并格式化代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 private static final DateTimeFormatter FORMAT_FOURTEEN = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); private static final DateTimeFormatter FORMAT_DATE = DateTimeFor
-
java一个数据整理的方法代码实例
这篇文章主要介绍了java一个数据整理的方法代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 import java.sql.*; public class Main { //本地数据库 // static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; // static final String DB_URL = "jdbc:mysql://127.0.0.1
-
java 对象参数去空格方式代码实例
这篇文章主要介绍了java 对象参数去空格方式代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 import java.lang.reflect.Field; import java.lang.reflect.Method; public class Test { /** * 去掉bean中所有属性为字符串的前后空格 * * @param bean * @throws Exception */ public static void bea
-
Java数组集合的深度复制代码实例
这篇文章主要介绍了Java数组集合的深度复制代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Java当我们想要对一个数组进行一些操作,同时又不希望对原来的数组数据有影响的时候,使用引用是不能满足我们的需求的, 这时候我们可以使用System.arraycopy()方法实现,对用这两种复制方式,我们习惯称前者为浅复制,后者为深复制.深复制的 实现方法如下: public static void arraycopyTest() { int[
-
微信小程序实现一个简单swiper代码实例
这篇文章主要介绍了微信小程序实现一个简单swiper代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 话不多说,上截图 HTML <swiper class="swiper-block" previous-margin="70rpx" next-margin="70rpx" current="0" autoplay="true" bindcha
-
pymysql的简单封装代码实例
这篇文章主要介绍了pymysql的简单封装代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 #coding=utf-8 #!/usr/bin/python import pymysql class MYSQL: """ 对pymysql的简单封装 """ def __init__(self,host,user,pwd,db): self.host = host self.user = us
随机推荐
- IOS中使用UIWebView 加载网页、文件、 html的方法
- jQuery 源码分析笔记(5) jQuery.support
- 一个注册表搞定“打开局域网机器文件提示”
- debian安装后sudo命令不能用的解决方法
- java连接mysql数据库的方法
- 了解Javascript的模块化开发
- 将string解析为json的几种方式小结
- 微信小程序教程系列之新建页面(4)
- asp.net为网页动态添加description描述信息的方法
- php.ini修改php上传文件大小限制的方法详解
- php遍历树的常用方法汇总
- 15道非常经典的Java面试题 附详细答案
- SED单行脚本快速参考(流编辑器)第1/2页
- JS瀑布流实现方法实例分析
- 『jQuery』.html(),.text()和.val()的概述及使用
- 在Action中以Struts2的方式输出JSON数据的实例
- javascript一些不错的函数脚本代码
- 128进制加密数据示例分享
- Android中使用定时器的三种方法
- java 指定某个jdk版本方法