On the basis of [JAVA] Java in the SPI

talk is cheap, show me the code.

Class structure below

  • 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.");
    }
}

Profile 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();
    }
}

Export

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.
Published 107 original articles · won praise 46 · views 50000 +

Guess you like

Origin blog.csdn.net/AV_woaijava/article/details/105079529