SPI-ServiceLoader实践

文章介绍了如何使用Java的ServiceProviderInterface(SPI)机制来加载服务实现。通过创建`META-INF/services`目录下的配置文件,指定接口`TestService`的实现类`TestServiceImpl`和`OtherServiceImpl`,然后在测试类`MyTest`中利用`ServiceLoader`加载并执行这些实现。
摘要由CSDN通过智能技术生成

代码目录

在这里插入图片描述

代码实现

  1. 接口定义

    TestService

    package com.service;
    
    	public interface TestService {
    
        String test();
    
    }
    
  2. 接口实现

    TestServiceImpl

    package com.service.impl;
    
    import com.service.TestService;
    
    public class TestServiceImpl implements TestService {
        @Override
        public String test() {
            return "test";
        }
    }
    

    OtherServiceImpl

    package com.service.impl;
    
    import com.service.TestService;
    
    public class OtherServiceImpl implements TestService {
        @Override
        public String test() {
            return "other";
        }
    }
    
  3. 配置文件
    com.service.TestService

    com.service.impl.TestServiceImpl
    com.service.impl.OtherServiceImpl

  4. 测试类

    MyTest

    package com;
    
    import com.service.TestService;
    import org.junit.Test;
    
    import java.util.ServiceLoader;
    
    public class MyTest {
    
        @Test
        public void test() {
            ServiceLoader<TestService> services = ServiceLoader.load(TestService.class);
            services.forEach(testService -> System.out.println(testService.test()));
        }
    }
    
  5. 运行结果
    在这里插入图片描述

  6. 要点
    (1)类路径下需要创建目录:META-INF/services
    (2)META-INF/services创建文件com.service.TestService,文件名必须是接口的全路径名
    (3)com.service.TestService的内容为接口的实现类,且为实现类的全路径名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值