Skip to content

Commit 83b3014

Browse files
author
Pankaj Kumar
committed
Java SPI Examples, ServiceLoader Example
1 parent 1d07095 commit 83b3014

File tree

6 files changed

+80
-0
lines changed

6 files changed

+80
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<project xmlns="http://maven.apache.org/POM/4.0.0"
2+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4+
<modelVersion>4.0.0</modelVersion>
5+
<groupId>com.journaldev.java</groupId>
6+
<artifactId>ServiceLoader-Example</artifactId>
7+
<version>0.0.1-SNAPSHOT</version>
8+
9+
<build>
10+
<plugins>
11+
<plugin>
12+
<groupId>org.apache.maven.plugins</groupId>
13+
<artifactId>maven-compiler-plugin</artifactId>
14+
<configuration>
15+
<source>11</source>
16+
<target>11</target>
17+
</configuration>
18+
</plugin>
19+
</plugins>
20+
</build>
21+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.journaldev.serviceproviders;
2+
3+
public class EmailServiceProvider implements MessageServiceProvider {
4+
5+
public void sendMessage(String message) {
6+
System.out.println("Sending Email with Message = "+message);
7+
}
8+
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.journaldev.serviceproviders;
2+
3+
public interface MessageServiceProvider {
4+
5+
void sendMessage(String message);
6+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.journaldev.serviceproviders;
2+
3+
public class PushNotificationServiceProvider implements MessageServiceProvider {
4+
5+
public void sendMessage(String message) {
6+
System.out.println("Sending Push Notification with Message = "+message);
7+
}
8+
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.journaldev.test;
2+
3+
import java.util.Optional;
4+
import java.util.ServiceLoader;
5+
6+
import com.journaldev.serviceproviders.MessageServiceProvider;
7+
8+
public class ServiceLoaderTest {
9+
10+
public static void main(String[] args) {
11+
ServiceLoader<MessageServiceProvider> serviceLoader = ServiceLoader.load(MessageServiceProvider.class);
12+
13+
for (MessageServiceProvider service : serviceLoader) {
14+
service.sendMessage("Hello");
15+
}
16+
17+
// using Java 8 Optional to get the first service
18+
Optional<MessageServiceProvider> firstService = serviceLoader.findFirst();
19+
if (firstService.isPresent()) {
20+
firstService.get().sendMessage("Hello Friend");
21+
}
22+
23+
// using Java 8 forEach() method
24+
serviceLoader.forEach((service) -> service.sendMessage("Have a Nice Day!"));
25+
26+
// Total Number of Loaded Services
27+
System.out.println(serviceLoader.stream().count());
28+
29+
30+
31+
}
32+
33+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
com.journaldev.serviceproviders.EmailServiceProvider
2+
com.journaldev.serviceproviders.PushNotificationServiceProvider

0 commit comments

Comments
 (0)