Sobre la base de [JAVA] Java en el SPI

Hablar es fácil. Enséñame el código.

La estructura de clases debajo

  • Java
    • com.itplh.spi
      • Animal.java
      • Bat.java
      • Cat.java
      • Dog.java
      • Test.java
  • recursos
    • META-INF
      • servicios
        • 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.");
    }
}

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

exportación

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.
Publicados 107 artículos originales · alabanza won 46 · Vistas a 50000 +

Supongo que te gusta

Origin blog.csdn.net/AV_woaijava/article/details/105079529
Recomendado
Clasificación