【JAVA基础】Java中的SPI初探

talk is cheap, show me the code.

Coding

类结构如下

  • java
    • com.itplh.spi
      • Animal.java
      • Bat.java
      • Cat.java
      • Dog.java
      • Test.java
  • resources
    • META-INF
      • services
        • com.itplh.spi.Animal

Animal.java

@FunctionalInterface
public interface Animal {

    void shout();

}

Cat.java

@Slf4j
public class Cat implements Animal {
    @Override
    public void shout() {
        log.info("miao moiao miao ~");
    }
}

Dog.java

@Slf4j
public class Dog implements Animal {
    @Override
    public void shout() {
        log.info("wang wang wang ~");
    }
}

Bat.java

@Slf4j
public class Bat implements Animal {
    @Override
    public void shout() {
        log.info("don't know bat how shout.");
    }
}

配置文件 Animal

com.itplh.spi.Cat
com.itplh.spi.Dog

Test.java

public class Test {

    public static Map<Class<? extends Animal>, Animal> serviceMap = new ConcurrentHashMap<>(6);

    static {
        ServiceLoader<? extends Animal> load = ServiceLoader.load(Animal.class);
        Iterator<? extends Animal> iterator = load.iterator();
        while (iterator.hasNext()) {
            Animal animal = iterator.next();
            serviceMap.put(animal.getClass(), animal);
        }
    }

    public static void main(String[] args) {
        serviceMap.get(Cat.class).shout();
        serviceMap.get(Dog.class).shout();
        new Bat().shout();
    }
}

输出

19:50:30.225 [main] INFO com.itplh.spi.Cat - miao moiao miao ~
19:50:30.229 [main] INFO com.itplh.spi.Dog - wang wang wang ~
19:50:30.230 [main] INFO com.itplh.spi.Bat - don't know bat how shout.

应用场景

  • Mysql驱动的选择driverManager根据配置来确定要使用的驱动;
  • dubbo框架中的扩展机制 dubbo官网链接

参考

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

听过了API咱们来看看SPI是什么

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值