JAVA基础-SPI

1,什么是SPI

SPI全名Service Provider interface,翻译过来就是“服务提供接口”,再说简单就是提供某一个服务的接口, 提供给服务开发者或者服务生产商来进行实现。

Java SPI 是JDK内置的一种动态加载扩展点的实现。

这个机制在一般的业务代码中很少用到(个人接触到的业务没有用到过),但是再底层框架中却被大量使用,包括JDBC、Dubbo、Spring框架、日志接口中都有用到,不同的是有的使用Java原生的实现,有的框架则自己实现了一套SPI机制。

2,SPI 简单实现

接口
package com.demo.base.spi;

public interface Animal {
    void eat();
}

几个实现类
package com.demo.base.spi;

public class Cat implements Animal {
    @Override
    public void eat() {
        System.out.println("老猫也爱吃饭");
    }
}

package com.demo.base.spi;

public class Dog implements Animal {
    @Override
    public void eat() {
        System.out.println("狗子爱干饭");
    }
}

package com.demo.base.spi;

public class Pig implements Animal {
    @Override
    public void eat() {
        System.out.println("猪吃的最多");
    }
}

测试类
package com.demo.base.spi;

import java.util.Iterator;
import java.util.ServiceLoader;

public class SpiDemo {
    public static void main(String[] args) {
        ServiceLoader<Animal> animals = ServiceLoader.load(Animal.class);
        Iterator<Animal> iterator = animals.iterator();
        while (iterator.hasNext()){
            iterator.next().eat();
        }
    }
}

/META-INF/services 下定一个文件,文件名与接口权限全限定名一致,文件内容就是要发现的实体类全限定名

com.demo.base.spi.Animal
com.demo.base.spi.Cat
com.demo.base.spi.Dog
com.demo.base.spi.Pig
posted @ 2024-02-19 10:35  primaryC  阅读(11)  评论(0编辑  收藏  举报