From 6c5c149014c5686b3abb51c9f0e0c0165740d793 Mon Sep 17 00:00:00 2001 From: "Hani M. K" Date: Sun, 22 May 2022 18:15:52 +0300 Subject: [PATCH] java-spi java service provider interface --- java-spi/java-spi-api/pom.xml | 27 ++++++++++++ .../main/java/com/hmkcode/api/MyService.java | 6 +++ .../api/MyServiceProviderInterface.java | 6 +++ .../lib/java-spi-api-1.0-SNAPSHOT.jar | Bin 0 -> 2492 bytes .../lib/java-spi-impl1-1.0-SNAPSHOT.jar | Bin 0 -> 3328 bytes java-spi/java-spi-app/pom.xml | 40 ++++++++++++++++++ .../src/main/java/com/hmkcode/app/App.java | 9 ++++ .../java/com/hmkcode/app/MyServiceLoader.java | 31 ++++++++++++++ .../lib/java-spi-api-1.0-SNAPSHOT.jar | Bin 0 -> 2492 bytes java-spi/java-spi-impl1/pom.xml | 31 ++++++++++++++ .../java/com/hmkcode/impl/MyServiceImpl1.java | 12 ++++++ .../hmkcode/impl/MyServiceProviderImpl1.java | 13 ++++++ ...com.hmkcode.api.MyServiceProviderInterface | 1 + 13 files changed, 176 insertions(+) create mode 100644 java-spi/java-spi-api/pom.xml create mode 100644 java-spi/java-spi-api/src/main/java/com/hmkcode/api/MyService.java create mode 100644 java-spi/java-spi-api/src/main/java/com/hmkcode/api/MyServiceProviderInterface.java create mode 100644 java-spi/java-spi-app/lib/java-spi-api-1.0-SNAPSHOT.jar create mode 100644 java-spi/java-spi-app/lib/java-spi-impl1-1.0-SNAPSHOT.jar create mode 100644 java-spi/java-spi-app/pom.xml create mode 100644 java-spi/java-spi-app/src/main/java/com/hmkcode/app/App.java create mode 100644 java-spi/java-spi-app/src/main/java/com/hmkcode/app/MyServiceLoader.java create mode 100644 java-spi/java-spi-impl1/lib/java-spi-api-1.0-SNAPSHOT.jar create mode 100644 java-spi/java-spi-impl1/pom.xml create mode 100644 java-spi/java-spi-impl1/src/main/java/com/hmkcode/impl/MyServiceImpl1.java create mode 100644 java-spi/java-spi-impl1/src/main/java/com/hmkcode/impl/MyServiceProviderImpl1.java create mode 100644 java-spi/java-spi-impl1/src/main/resources/META-INF/services/com.hmkcode.api.MyServiceProviderInterface diff --git a/java-spi/java-spi-api/pom.xml b/java-spi/java-spi-api/pom.xml new file mode 100644 index 00000000..e7c1e87d --- /dev/null +++ b/java-spi/java-spi-api/pom.xml @@ -0,0 +1,27 @@ + + + + 4.0.0 + + com.hmkcode.api + java-spi-api + 1.0-SNAPSHOT + + java-spi-api + + http://www.example.com + + + UTF-8 + 1.7 + 1.7 + + + + + + + + + diff --git a/java-spi/java-spi-api/src/main/java/com/hmkcode/api/MyService.java b/java-spi/java-spi-api/src/main/java/com/hmkcode/api/MyService.java new file mode 100644 index 00000000..4928f453 --- /dev/null +++ b/java-spi/java-spi-api/src/main/java/com/hmkcode/api/MyService.java @@ -0,0 +1,6 @@ +package com.hmkcode.api; + +public interface MyService { + + void doSomething(); +} diff --git a/java-spi/java-spi-api/src/main/java/com/hmkcode/api/MyServiceProviderInterface.java b/java-spi/java-spi-api/src/main/java/com/hmkcode/api/MyServiceProviderInterface.java new file mode 100644 index 00000000..8e166424 --- /dev/null +++ b/java-spi/java-spi-api/src/main/java/com/hmkcode/api/MyServiceProviderInterface.java @@ -0,0 +1,6 @@ +package com.hmkcode.api; + +public interface MyServiceProviderInterface { + + MyService getService(); +} diff --git a/java-spi/java-spi-app/lib/java-spi-api-1.0-SNAPSHOT.jar b/java-spi/java-spi-app/lib/java-spi-api-1.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..23a1c6be1ad6136d8b3ee9fc32a69c57cddfaf5f GIT binary patch literal 2492 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 literal 0 HcmV?d00001 diff --git a/java-spi/java-spi-app/pom.xml b/java-spi/java-spi-app/pom.xml new file mode 100644 index 00000000..74906a4f --- /dev/null +++ b/java-spi/java-spi-app/pom.xml @@ -0,0 +1,40 @@ + + + + 4.0.0 + + com.hmkcode.app + java-spi-app + 1.0-SNAPSHOT + + java-spi-app + + http://www.example.com + + + UTF-8 + 1.7 + 1.7 + + + + + + com.hmkcode.api + java-spi-api + 1.0-SNAPSHOT + system + ${project.basedir}/lib/java-spi-api-1.0-SNAPSHOT.jar + + + com.hmkcode.impl + java-spi-impl1 + 1.0-SNAPSHOT + system + ${project.basedir}/lib/java-spi-impl1-1.0-SNAPSHOT.jar + + + + + diff --git a/java-spi/java-spi-app/src/main/java/com/hmkcode/app/App.java b/java-spi/java-spi-app/src/main/java/com/hmkcode/app/App.java new file mode 100644 index 00000000..8e46d684 --- /dev/null +++ b/java-spi/java-spi-app/src/main/java/com/hmkcode/app/App.java @@ -0,0 +1,9 @@ +package com.hmkcode.app; + +public class App +{ + public static void main( String[] args ) + { + MyServiceLoader.defaultProvider().getService().doSomething(); + } +} diff --git a/java-spi/java-spi-app/src/main/java/com/hmkcode/app/MyServiceLoader.java b/java-spi/java-spi-app/src/main/java/com/hmkcode/app/MyServiceLoader.java new file mode 100644 index 00000000..2efc5d74 --- /dev/null +++ b/java-spi/java-spi-app/src/main/java/com/hmkcode/app/MyServiceLoader.java @@ -0,0 +1,31 @@ +package com.hmkcode.app; + +import java.nio.file.ProviderNotFoundException; +import java.util.Iterator; +import java.util.ServiceLoader; + +import com.hmkcode.api.MyServiceProviderInterface; + + +public class MyServiceLoader { + + private static final String DEFAULT_PROVIDER = "com.hmkcode.impl.MyServiceProviderImpl1"; + + public static MyServiceProviderInterface defaultProvider() { + return provider(DEFAULT_PROVIDER); + } + + public static MyServiceProviderInterface provider(String providerName) { + ServiceLoader loader = ServiceLoader.load(MyServiceProviderInterface.class); + + Iterator it = loader.iterator(); + while (it.hasNext()) { + MyServiceProviderInterface provider = it.next(); + if (providerName.equals(provider.getClass().getName())) { + return provider; + } + } + throw new ProviderNotFoundException("provider " + providerName + " not found"); + } + +} diff --git a/java-spi/java-spi-impl1/lib/java-spi-api-1.0-SNAPSHOT.jar b/java-spi/java-spi-impl1/lib/java-spi-api-1.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..23a1c6be1ad6136d8b3ee9fc32a69c57cddfaf5f GIT binary patch literal 2492 zcmWIWW@h1H0D+^;TSLGMD8UJ&eO*Hwbv^yu^aG&EI2euqm1Rf-e98byHvq8+vNB&s zKTkK;;1E4ux6i(3PWyQ4>RsgZ*3~+9=KSU$gDb`lo)+nNojal9t?R_W{$xqm6fx}s zDiu5DbO#B02L+eR)mkee!!0z~I7qZc_;k=`k)E$QUwVM@UdF{<2R2DMSQ{xYY3_>C zyy;+l<|~gwR>e*Rn9CR#wxD@{1?aNm{9L%(F;(zDRb=F5C+DZ6BB?xpW|jb&%EW?9 zxN1n4h|Oc3)c{o055)3VRQpy2rxulECa3Bp=Oh*vTYt^JZpX&Pmdxf?#-`@RcJj%e zn7=)D-aPp;CFJjsCZF2-ryg8cwCT)~kTNzgH@3z#M>e_qopWSQN$vk7Ypy&Ia$|cp z<jE4b9#6jQh5{(aF|S- z+Q@q(DS>^G504By*dUI#2;`LL13LN?5F6lgd_YltS!POVk!M~>YEfDuF5j%h<(n%F zi~ejnGv$iX`8|`aEZTAexA)e4xgxYe&W$aS*H?ayTNJY>`}65ys>^q!K4TC){dk)X ze+s{}GP5$XF*An&)7!Mv1m=wrHyTxhnc3lf!%WlsK)=D$bZ%lRAYpi@{+Z0tflUWTD8rrg7_U*oUcUva+>GRuf$976wN#1|l zXaCH^$+fWyWh2zLN~w#h_zGw&EMD1F_-Rwsf$b+%r1{#I)7I3nKMXX`F!%F%f41Y& ztoIIrc{?;3GomjXt#MoLc}uM8)Wv%zn|EbOU5atNn>s7*!q=Q#JjZ4wublJT%fU!S zK}1Jc{NqZoJIB}mz0Lo3*^S+Mm)+q;;o;wN>EoKCFW&7~ z{>b#t3gLww^AdaH=3U!dt>U$g%i)sp`ic6CU$d>sS2XrcmJ>KOH#2+no7-{;=d*(u zITuRg?%Y?Xk)ZHLB4$geNA#qeZJSPYUXIp&u+M&y&OMIB^;y5H?xs1}D{F7qtKsvo z?c(Jtne(4-W2nD$J=l=lmg`dc>4OcY4!71HeZ9o~L7znn*9mo4p~S&(9T=O!fosKT zfw9;G#8za)WS8ng3aDT`wI^-$0L5As>8oyw5&<8pP+P!?;OXw1-EO zr*|#SnKeE>qIYVYx9~Q|FtY-)h;rPzFN^+MVmdE!8<;KkLJOI_z(OW&-H}C;&H!_v z(1Mt-q{u~ig^tVgA{OavU14EtfBss)c?a_w=M5EZ9JX(n&JD~~j7%cTxGM{w&wxOH z;jJTxhUXlFHtdxLNHGX3X;cT2aBWCc3Bm--A{ + + + 4.0.0 + + com.hmkcode.impl + java-spi-impl1 + 1.0-SNAPSHOT + + java-spi-impl1 + + http://www.example.com + + + UTF-8 + 1.7 + 1.7 + + + + + com.hmkcode.api + java-spi-api + 1.0-SNAPSHOT + system + ${project.basedir}/lib/java-spi-api-1.0-SNAPSHOT.jar + + + + diff --git a/java-spi/java-spi-impl1/src/main/java/com/hmkcode/impl/MyServiceImpl1.java b/java-spi/java-spi-impl1/src/main/java/com/hmkcode/impl/MyServiceImpl1.java new file mode 100644 index 00000000..24afcfa4 --- /dev/null +++ b/java-spi/java-spi-impl1/src/main/java/com/hmkcode/impl/MyServiceImpl1.java @@ -0,0 +1,12 @@ +package com.hmkcode.impl; + +import com.hmkcode.api.MyService; + +public class MyServiceImpl1 implements MyService{ + + @Override + public void doSomething() { + System.out.println("MyServiceImpl1"); + + } +} diff --git a/java-spi/java-spi-impl1/src/main/java/com/hmkcode/impl/MyServiceProviderImpl1.java b/java-spi/java-spi-impl1/src/main/java/com/hmkcode/impl/MyServiceProviderImpl1.java new file mode 100644 index 00000000..252b7a3e --- /dev/null +++ b/java-spi/java-spi-impl1/src/main/java/com/hmkcode/impl/MyServiceProviderImpl1.java @@ -0,0 +1,13 @@ +package com.hmkcode.impl; + +import com.hmkcode.api.MyService; +import com.hmkcode.api.MyServiceProviderInterface; + +public class MyServiceProviderImpl1 implements MyServiceProviderInterface { + + @Override + public MyService getService() { + return new MyServiceImpl1(); + } + +} diff --git a/java-spi/java-spi-impl1/src/main/resources/META-INF/services/com.hmkcode.api.MyServiceProviderInterface b/java-spi/java-spi-impl1/src/main/resources/META-INF/services/com.hmkcode.api.MyServiceProviderInterface new file mode 100644 index 00000000..008c8c11 --- /dev/null +++ b/java-spi/java-spi-impl1/src/main/resources/META-INF/services/com.hmkcode.api.MyServiceProviderInterface @@ -0,0 +1 @@ +com.hmkcode.impl.MyServiceProviderImpl1 \ No newline at end of file