JAVA SPI服务发现

本文介绍了Java SPI(Service Provider Interface)机制,详细阐述了SPI的概念、使用步骤,并通过一个实例展示了如何创建接口、实现接口并在资源文件中配置服务发现。最后,通过主程序演示了如何加载并运行SPI服务。
摘要由CSDN通过智能技术生成

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...
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值