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() {}
}