SPILoader.java
package emissary.spi;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ServiceLoader;
/**
 * Load SPI implementations to support initialization of the Emissary server.
 * 
 * <pre>
 * - Loading is delegated to the {@link java.util.ServiceLoader}.
 * - Configured via src/main/resources/META-INF/services/emissary.spi.InitializationProvider
 * </pre>
 */
public class SPILoader {
    private static final Logger logger = LoggerFactory.getLogger(SPILoader.class);
    public static void load() {
        ServiceLoader<InitializationProvider> loader = ServiceLoader.load(InitializationProvider.class);
        loader.forEach(provider -> {
            provider.initialize();
            logger.info("Initialized {}", provider.getClass().getName());
        });
    }
    public static void unload() {
        ServiceLoader<InitializationProvider> loader = ServiceLoader.load(InitializationProvider.class);
        loader.forEach(InitializationProvider::shutdown);
    }
    private SPILoader() {}
}