IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> JAVA SPI服务发现 -> 正文阅读

[Java知识库]JAVA SPI服务发现

Java SPI 服务发现

一、SPI概述

Java SPI提供了一种机制:为某个接口寻找服务实现的机制。

调用者根据实际使用需要,启用、扩展、或者替换框架的实现策略。

参考:高级开发必须理解的Java中SPI机制

二、使用Java SPI

使用Java SPI,需要遵守如下约定:

  • 1、当服务提供者提供了接口的一种具体实现后,在jar包的META-INF/services目录下创建一个以“接口全限定名”为命名的文件,内容为实现类的全限定名;
  • 2、接口实现类所在的jar包放在主程序的classpath中;
  • 3、主程序通过java.util.ServiceLoder动态装载实现模块,它通过扫描META-INF/services目录下的配置文件找到实现类的全限定名,把类加载到JVM;
  • 4、SPI的实现类必须携带一个不带参数的构造方法;

三、JAVA SPI示例

创建一个接口:

package com.hef.service;

public interface OrderService {

    void seeOrder();
}

创建两个接口的实现:

package com.hef.service.impl;

import com.hef.service.OrderService;

/**
 * @Date 2022/1/19
 * @Author lifei
 */
public class AppleOrderService implements OrderService {
    @Override
    public void seeOrder() {
        System.out.println("apple order...");
    }
}
package com.hef.service.impl;

import com.hef.service.OrderService;

/**
 * @Date 2022/1/19
 * @Author lifei
 */
public class OrigineOrderService implements OrderService {
    @Override
    public void seeOrder() {
        System.out.println("origine order...");
    }
}

创建文件src/main/resources/META-INF/services/com.hef.service.OrderService,里面内容为:

com.hef.service.impl.AppleOrderService
com.hef.service.impl.OrigineOrderService

服务发现演示:

package com.hef;

import com.hef.service.OrderService;

import java.util.ServiceLoader;

/**
 * @Date 2022/1/19
 * @Author lifei
 */
public class OrderMain {

    public static void main(String[] args) {
        ServiceLoader<OrderService> load = ServiceLoader.load(OrderService.class);
        for (OrderService orderService : load) {
            orderService.seeOrder();
        }
    }
}

/*
运行上面的程序,打印如下内容:
apple order...
origine order...
*/
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 15:57:54  更:2022-03-03 16:02:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:32:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码