java.util.spi
import java.util.logging.Logger;
import java.util.logging.ServiceLoader;
public class CustomLogger {
public static void main(String[] args) {
// Load the custom logger service provider
ServiceLoader<Logger> loggerLoader = ServiceLoader.load(Logger.class);
// Iterate over the available providers and print their names
for (Logger logger : loggerLoader) {
System.out.println("Provider: " + logger.getClass().getName());
}
}
}import java.lang.annotation.Annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ServiceLoader;
// Custom annotation interface
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation {
String value();
}
// Custom service provider class
public class MyAnnotationProvider implements ServiceLoader.Provider<MyAnnotation> {
@Override
public MyAnnotation get() {
return new MyAnnotation() {
@Override
public String value() {
return "Custom annotation value";
}
};
}
}