ServiceLoader Java Example
August 24, 2013
A service can be an interface or abstract class. ServiceLoader provides the flexibility to load different implementation of a service. Let’s a service is CPService. This will be an interface. Now according to the requirement there can be more than one implementation of CPService. Find the implementation classes in CPService interface.
CPService.java
package com.concretepage.util; public interface CPService { public void show(); }
CPServiceImplOne.java
package com.concretepage.util; public class CPServiceImplOne implements CPService { @Override public void show(){ System.out.println("CPServiceImplOne has been loaded...."); } }
CPServiceImplTwo.java
package com.concretepage.util; public class CPServiceImplTwo implements CPService { @Override public void show(){ System.out.println("CPServiceImplTwo has been loaded...."); } }
META-INF --- services ---- com.util.CPService
Now run main method to load Service
ServiceLoaderDemo.java
package com.concretepage.util; import java.util.ServiceLoader; public class ServiceLoaderDemo { public static void main(String[] args) { ServiceLoaderserviceLoader = ServiceLoader.load(CPService.class); for (CPService cpService : serviceLoader) { cpService.show(); } } }
CPServiceImplOne has been loaded....If we configure com.util.concretepage.CPServiceImplTwo then output will be
CPServiceImplTwo has been loaded....Service implementation can be provided in jar too and can be kept in classpath. For the flexibility purpose to load different services for different client, becomes easy in this way.