- Java.util Package Classes
- Java.util - Home
- Java.util - ArrayDeque
- Java.util - ArrayList
- Java.util - Arrays
- Java.util - BitSet
- Java.util - Calendar
- Java.util - Collections
- Java.util - Currency
- Java.util - Date
- Java.util - Dictionary
- Java.util - EnumMap
- Java.util - EnumSet
- Java.util - Formatter
- Java.util - GregorianCalendar
- Java.util - HashMap
- Java.util - HashSet
- Java.util - Hashtable
- Java.util - IdentityHashMap
- Java.util - LinkedHashMap
- Java.util - LinkedHashSet
- Java.util - LinkedList
- Java.util - ListResourceBundle
- Java.util - Locale
- Java.util - Observable
- Java.util - PriorityQueue
- Java.util - Properties
- Java.util - PropertyPermission
- Java.util - PropertyResourceBundle
- Java.util - Random
- Java.util - ResourceBundle
- Java.util - ResourceBundle.Control
- Java.util - Scanner
- Java.util - ServiceLoader
- Java.util - SimpleTimeZone
- Java.util - Stack
- Java.util - StringTokenizer
- Java.util - Timer
- Java.util - TimerTask
- Java.util - TimeZone
- Java.util - TreeMap
- Java.util - TreeSet
- Java.util - UUID
- Java.util - Vector
- Java.util - WeakHashMap
- Java.util Package Extras
- Java.util - Interfaces
- Java.util - Exceptions
- Java.util - Enumerations
- Java.util Useful Resources
- Java.util - Useful Resources
- Java.util - Discussion
Java ServiceLoader load() Method
Description
The Java ServiceLoader load(Class<S> service) method creates a new service loader for the given service type, using the current thread's context class loader.
Declaration
Following is the declaration for java.util.ServiceLoader.load() method
public static <S> ServiceLoader<S> load(Class<S> service)
Parameters
service − The interface or abstract class representing the service
Return Value
This method returns a new service loader
Exception
NA
Java ServiceLoader load(Class<S> service, ClassLoader loader) Method
Description
The java.util.ServiceLoader.load(Class<S> service,ClassLoader loader) method creates a new service loader for the given service type and class loader.
Declaration
Following is the declaration for java.util.ServiceLoader.load(Class<S> service,ClassLoader loader) method
public static <S> ServiceLoader<S> load(Class<S> service, ClassLoader loader)
Parameters
service − The interface or abstract class representing the service
loader − The class loader to be used to load provider-configuration files and provider classes, or null if the system class loader (or, failing that, the bootstrap class loader) is to be used
Return Value
This method returns a new service loader
Exception
NA
Examples
In order the service to be registered, we need a META-INF/services folder in our classpath. In this particular folder, we need a text file with the name of the interface we implementing containing a single line listing the concrete class name of the implementation. In our case the name of the file is com.tutorialspoint.ServiceProvider and contains this line −
com.tutorialspoint.ServiceImplementation
Our service code is the following −
package com.tutorialspoint; public class ServiceImplementation extends ServiceProvider { public String getMessage() { return "Hello World"; } }
Loading a ServiceLoader Instance using Given ServiceLoader implementation Class Example
The following code loads the service that is registered and uses it to get the message from the service. We've created a method getDefault() which returns a ServiceProvider. This method gets a serviceLoader object using ServiceLoader.load(Class<S> service). Then serviceLoader is iterated and first provider is returned. In the end we're throwing error if provider is not returned. Then using getDefault() we've retrieved the serviceProvider and printed the message using this object.
package com.tutorialspoint; import java.util.ServiceLoader; public abstract class ServiceProvider { public static ServiceProvider getDefault() { // load our plugin ServiceLoader<ServiceProvider> serviceLoader = ServiceLoader.load(ServiceProvider.class); //checking if load was successful for (ServiceProvider provider : serviceLoader) { return provider; } throw new Error("Something is wrong with registering the addon"); } public abstract String getMessage(); public static void main(String[] ignored) { // create a new provider and call getMessage() ServiceProvider provider = ServiceProvider.getDefault(); System.out.println(provider.getMessage()); } }
Output
Let us compile and run the above program, this will produce the following result −
Hello World
Loading a ServiceLoader Instance using System Class Loader Example
The following code loads the service that is registered and uses it to get the message from the service. We've created a method getDefault() which returns a ServiceProvider. This method gets a serviceLoader object using ServiceLoader.load(Class<S> service, ClassLoader loader). Then serviceLoader is iterated and first provider is returned. In the end we're throwing error if provider is not returned. Then using getDefault() we've retrieved the serviceProvider and printed the message using this object.
package com.tutorialspoint; import java.util.ServiceLoader; public abstract class ServiceProvider { public static ServiceProvider getDefault() { // load our plugin with the default system class loader ServiceLoader<ServiceProvider> serviceLoader = ServiceLoader.load(ServiceProvider.class, ClassLoader.getSystemClassLoader()); //checking if load was successful for (ServiceProvider provider : serviceLoader) { return provider; } throw new Error("Something is wrong with registering the addon"); } public abstract String getMessage(); public static void main(String[] ignored) { // create a new provider and call getMessage() ServiceProvider provider = ServiceProvider.getDefault(); System.out.println(provider.getMessage()); } }
Output
Let us compile and run the above program, this will produce the following result −
Hello World
To Continue Learning Please Login
Login with Google