diff --git a/autovalue/pom.xml b/autovalue/pom.xml
index 3ec2d26b35..a10e8ef055 100644
--- a/autovalue/pom.xml
+++ b/autovalue/pom.xml
@@ -29,6 +29,12 @@
+
+ com.google.auto.service
+ auto-service
+ ${auto-service.version}
+ true
+
com.google.inject
@@ -40,6 +46,7 @@
1.3
1.0-beta5
+ 1.0-rc5
4.2.0
diff --git a/autovalue/src/main/java/com/baeldung/autoservice/BingTranslationServiceProvider.java b/autovalue/src/main/java/com/baeldung/autoservice/BingTranslationServiceProvider.java
new file mode 100644
index 0000000000..86d42e80fa
--- /dev/null
+++ b/autovalue/src/main/java/com/baeldung/autoservice/BingTranslationServiceProvider.java
@@ -0,0 +1,14 @@
+package com.baeldung.autoservice;
+
+import com.google.auto.service.AutoService;
+
+import java.util.Locale;
+
+@AutoService(TranslationService.class)
+public class BingTranslationServiceProvider implements TranslationService {
+ @Override
+ public String translate(String message, Locale from, Locale to) {
+ // implementation details
+ return message + " (translated by Bing)";
+ }
+}
diff --git a/autovalue/src/main/java/com/baeldung/autoservice/GoogleTranslationServiceProvider.java b/autovalue/src/main/java/com/baeldung/autoservice/GoogleTranslationServiceProvider.java
new file mode 100644
index 0000000000..0bf91ee5ec
--- /dev/null
+++ b/autovalue/src/main/java/com/baeldung/autoservice/GoogleTranslationServiceProvider.java
@@ -0,0 +1,14 @@
+package com.baeldung.autoservice;
+
+import com.google.auto.service.AutoService;
+
+import java.util.Locale;
+
+@AutoService(TranslationService.class)
+public class GoogleTranslationServiceProvider implements TranslationService {
+ @Override
+ public String translate(String message, Locale from, Locale to) {
+ // implementation details
+ return message + " (translated by Google)";
+ }
+}
diff --git a/autovalue/src/main/java/com/baeldung/autoservice/TranslationService.java b/autovalue/src/main/java/com/baeldung/autoservice/TranslationService.java
new file mode 100644
index 0000000000..580db46cd1
--- /dev/null
+++ b/autovalue/src/main/java/com/baeldung/autoservice/TranslationService.java
@@ -0,0 +1,7 @@
+package com.baeldung.autoservice;
+
+import java.util.Locale;
+
+public interface TranslationService {
+ String translate(String message, Locale from, Locale to);
+}
\ No newline at end of file
diff --git a/autovalue/src/test/java/com/baeldung/autoservice/TranslationServiceUnitTest.java b/autovalue/src/test/java/com/baeldung/autoservice/TranslationServiceUnitTest.java
new file mode 100644
index 0000000000..9e1bd6d291
--- /dev/null
+++ b/autovalue/src/test/java/com/baeldung/autoservice/TranslationServiceUnitTest.java
@@ -0,0 +1,37 @@
+package com.baeldung.autoservice;
+
+import com.baeldung.autoservice.TranslationService;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.ServiceLoader;
+import java.util.stream.StreamSupport;
+
+import static org.junit.Assert.assertEquals;
+
+public class TranslationServiceUnitTest {
+
+ private ServiceLoader loader;
+
+ @Before
+ public void setUp() {
+ loader = ServiceLoader.load(TranslationService.class);
+ }
+
+ @Test
+ public void whenServiceLoaderLoads_thenLoadsAllProviders() {
+ long count = StreamSupport.stream(loader.spliterator(), false).count();
+ assertEquals(2, count);
+ }
+
+ @Test
+ public void whenServiceLoaderLoadsGoogleService_thenGoogleIsLoaded() {
+ TranslationService googleService = StreamSupport.stream(loader.spliterator(), false)
+ .filter(p -> p.getClass().getSimpleName().equals("GoogleTranslationServiceProvider"))
+ .findFirst()
+ .get();
+
+ String message = "message";
+ assertEquals(message + " (translated by Google)", googleService.translate(message, null, null));
+ }
+}
\ No newline at end of file