【JAVA基础】Java中的SPI初探
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
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官网链接
参考
听过了API咱们来看看SPI是什么
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |