Service Provider Interface
SPI (Service Provider Interface) is a pattern for decoupling service implementation from its usage.
Java SPI Example
// Service interface
public interface MessageService {
String getMessage();
}
// Service provider
public class HelloMessageService implements MessageService {
@Override
public String getMessage() {
return "Hello!";
}
}
// Service provider configuration (META-INF/services/com.example.MessageService)
com.example.HelloMessageService
Usage
ServiceLoader<MessageService> loader = ServiceLoader.load(MessageService.class);
for (MessageService service : loader) {
System.out.println(service.getMessage());
}
This pattern is commonly used in Java for pluggable architectures (JDBC, SLF4J, etc.).