diff --git a/xjs-study/dubbo-project/dubbo-spi-api/pom.xml b/xjs-study/dubbo-project/dubbo-spi-api/pom.xml new file mode 100644 index 00000000..63251d0e --- /dev/null +++ b/xjs-study/dubbo-project/dubbo-spi-api/pom.xml @@ -0,0 +1,27 @@ + + + + dubbo-project + com.xjs + 1.0 + + 4.0.0 + DubboSPI接口 + + dubbo-spi-api + + + 11 + 11 + + + + + org.apache.dubbo + dubbo + + + + diff --git a/xjs-study/dubbo-project/dubbo-spi-api/src/main/java/com/xjs/service/HelloService.java b/xjs-study/dubbo-project/dubbo-spi-api/src/main/java/com/xjs/service/HelloService.java new file mode 100644 index 00000000..a407cb9d --- /dev/null +++ b/xjs-study/dubbo-project/dubbo-spi-api/src/main/java/com/xjs/service/HelloService.java @@ -0,0 +1,18 @@ +package com.xjs.service; + +import org.apache.dubbo.common.URL; +import org.apache.dubbo.common.extension.Adaptive; +import org.apache.dubbo.common.extension.SPI; + +/** + * @author xiejs + * @since 2022-05-23 + */ +@SPI("human") +public interface HelloService { + + String sayHello(); + + @Adaptive + String sayHello(URL url); +} diff --git a/xjs-study/dubbo-project/dubbo-spi-impl/pom.xml b/xjs-study/dubbo-project/dubbo-spi-impl/pom.xml new file mode 100644 index 00000000..1f6dccc1 --- /dev/null +++ b/xjs-study/dubbo-project/dubbo-spi-impl/pom.xml @@ -0,0 +1,28 @@ + + + + dubbo-project + com.xjs + 1.0 + + 4.0.0 + DubboSPI实现 + + dubbo-spi-impl + + + 11 + 11 + + + + + com.xjs + dubbo-spi-api + 1.0 + + + + diff --git a/xjs-study/dubbo-project/dubbo-spi-impl/src/main/java/com/xjs/service/impl/DogHelloService.java b/xjs-study/dubbo-project/dubbo-spi-impl/src/main/java/com/xjs/service/impl/DogHelloService.java new file mode 100644 index 00000000..ccb1333b --- /dev/null +++ b/xjs-study/dubbo-project/dubbo-spi-impl/src/main/java/com/xjs/service/impl/DogHelloService.java @@ -0,0 +1,20 @@ +package com.xjs.service.impl; + +import com.xjs.service.HelloService; +import org.apache.dubbo.common.URL; + +/** + * @author xiejs + * @since 2022-05-23 + */ +public class DogHelloService implements HelloService { + @Override + public String sayHello() { + return "你在狗叫什么!"; + } + + @Override + public String sayHello(URL url) { + return "wa wa url"; + } +} diff --git a/xjs-study/dubbo-project/dubbo-spi-impl/src/main/java/com/xjs/service/impl/HumanHelloService.java b/xjs-study/dubbo-project/dubbo-spi-impl/src/main/java/com/xjs/service/impl/HumanHelloService.java new file mode 100644 index 00000000..8b93f07d --- /dev/null +++ b/xjs-study/dubbo-project/dubbo-spi-impl/src/main/java/com/xjs/service/impl/HumanHelloService.java @@ -0,0 +1,20 @@ +package com.xjs.service.impl; + +import com.xjs.service.HelloService; +import org.apache.dubbo.common.URL; + +/** + * @author xiejs + * @since 2022-05-23 + */ +public class HumanHelloService implements HelloService { + @Override + public String sayHello() { + return "傻逼你好"; + } + + @Override + public String sayHello(URL url) { + return "hello url"; + } +} diff --git a/xjs-study/dubbo-project/dubbo-spi-impl/src/main/resources/META-INF/dubbo/com.xjs.service.HelloService b/xjs-study/dubbo-project/dubbo-spi-impl/src/main/resources/META-INF/dubbo/com.xjs.service.HelloService new file mode 100644 index 00000000..2802b161 --- /dev/null +++ b/xjs-study/dubbo-project/dubbo-spi-impl/src/main/resources/META-INF/dubbo/com.xjs.service.HelloService @@ -0,0 +1,2 @@ +human=com.xjs.service.impl.HumanHelloService +dog=com.xjs.service.impl.DogHelloService diff --git a/xjs-study/dubbo-project/dubbo-spi-main/pom.xml b/xjs-study/dubbo-project/dubbo-spi-main/pom.xml new file mode 100644 index 00000000..187a80a8 --- /dev/null +++ b/xjs-study/dubbo-project/dubbo-spi-main/pom.xml @@ -0,0 +1,33 @@ + + + + dubbo-project + com.xjs + 1.0 + + 4.0.0 + DubboSPI调用 + + dubbo-spi-main + + + 11 + 11 + + + + + com.xjs + dubbo-spi-api + 1.0 + + + com.xjs + dubbo-spi-impl + 1.0 + + + + diff --git a/xjs-study/dubbo-project/dubbo-spi-main/src/main/java/com/xjs/DubboAdaptiveMain.java b/xjs-study/dubbo-project/dubbo-spi-main/src/main/java/com/xjs/DubboAdaptiveMain.java new file mode 100644 index 00000000..3306be3c --- /dev/null +++ b/xjs-study/dubbo-project/dubbo-spi-main/src/main/java/com/xjs/DubboAdaptiveMain.java @@ -0,0 +1,26 @@ +package com.xjs; + +import com.xjs.service.HelloService; +import org.apache.dubbo.common.URL; +import org.apache.dubbo.common.extension.ExtensionLoader; + +/** + * @author xiejs + * @since 2022-05-23 + */ +public class DubboAdaptiveMain { + + public static void main(String[] args) { + URL url = URL.valueOf("test://localhost/hello?hello.service=dog"); + + HelloService helloService = ExtensionLoader.getExtensionLoader(HelloService.class).getAdaptiveExtension(); + + + String s = helloService.sayHello(url); + + System.out.println(s); + + + } + +} diff --git a/xjs-study/dubbo-project/dubbo-spi-main/src/main/java/com/xjs/DubboSpiMain.java b/xjs-study/dubbo-project/dubbo-spi-main/src/main/java/com/xjs/DubboSpiMain.java new file mode 100644 index 00000000..a6c60445 --- /dev/null +++ b/xjs-study/dubbo-project/dubbo-spi-main/src/main/java/com/xjs/DubboSpiMain.java @@ -0,0 +1,27 @@ +package com.xjs; + +import com.xjs.service.HelloService; +import org.apache.dubbo.common.extension.ExtensionLoader; + +import java.util.Set; + +/** + * @author xiejs + * @since 2022-05-23 + */ +public class DubboSpiMain { + + public static void main(String[] args) { + //获取扩展加载器 + ExtensionLoader loader = ExtensionLoader.getExtensionLoader(HelloService.class); + + //遍历所有支持的扩展点 + Set extensions = loader.getSupportedExtensions(); + + for (String extension : extensions) { + HelloService helloService = loader.getExtension(extension); + System.out.println(helloService.sayHello()); + } + } + +} diff --git a/xjs-study/dubbo-project/pom.xml b/xjs-study/dubbo-project/pom.xml index d7470d5e..4d35c229 100644 --- a/xjs-study/dubbo-project/pom.xml +++ b/xjs-study/dubbo-project/pom.xml @@ -14,6 +14,9 @@ service-api service-provider service-consumer + dubbo-spi-api + dubbo-spi-impl + dubbo-spi-main dubbo-project diff --git a/xjs-study/java-spi/pom.xml b/xjs-study/java-spi/pom.xml new file mode 100644 index 00000000..5429e000 --- /dev/null +++ b/xjs-study/java-spi/pom.xml @@ -0,0 +1,26 @@ + + + + xjs-study + com.xjs + 1.0 + + 4.0.0 + pom + JavaSPI机制 + + spi-api + spi-impl + spi-main + + + java-spi + + + 11 + 11 + + + diff --git a/xjs-study/java-spi/spi-api/pom.xml b/xjs-study/java-spi/spi-api/pom.xml new file mode 100644 index 00000000..03f62f9c --- /dev/null +++ b/xjs-study/java-spi/spi-api/pom.xml @@ -0,0 +1,21 @@ + + + + java-spi + com.xjs + 1.0 + + 4.0.0 + pom + JavaSPI接口 + + spi-api + + + 11 + 11 + + + diff --git a/xjs-study/java-spi/spi-api/src/main/java/com/xjs/service/HelloService.java b/xjs-study/java-spi/spi-api/src/main/java/com/xjs/service/HelloService.java new file mode 100644 index 00000000..0325572d --- /dev/null +++ b/xjs-study/java-spi/spi-api/src/main/java/com/xjs/service/HelloService.java @@ -0,0 +1,10 @@ +package com.xjs.service; + +/** + * @author xiejs + * @since 2022-05-23 + */ +public interface HelloService { + + String sayHello(); +} diff --git a/xjs-study/java-spi/spi-impl/pom.xml b/xjs-study/java-spi/spi-impl/pom.xml new file mode 100644 index 00000000..8c074052 --- /dev/null +++ b/xjs-study/java-spi/spi-impl/pom.xml @@ -0,0 +1,28 @@ + + + + java-spi + com.xjs + 1.0 + + 4.0.0 + JavaSPI实现 + + spi-impl + + + 11 + 11 + + + + + com.xjs + spi-api + 1.0 + + + + diff --git a/xjs-study/java-spi/spi-impl/src/main/java/com/xjs/service/impl/DogHelloService.java b/xjs-study/java-spi/spi-impl/src/main/java/com/xjs/service/impl/DogHelloService.java new file mode 100644 index 00000000..af25be0d --- /dev/null +++ b/xjs-study/java-spi/spi-impl/src/main/java/com/xjs/service/impl/DogHelloService.java @@ -0,0 +1,14 @@ +package com.xjs.service.impl; + +import com.xjs.service.HelloService; + +/** + * @author xiejs + * @since 2022-05-23 + */ +public class DogHelloService implements HelloService { + @Override + public String sayHello() { + return "傻逼啊你"; + } +} diff --git a/xjs-study/java-spi/spi-impl/src/main/java/com/xjs/service/impl/HumanHelloService.java b/xjs-study/java-spi/spi-impl/src/main/java/com/xjs/service/impl/HumanHelloService.java new file mode 100644 index 00000000..828d378b --- /dev/null +++ b/xjs-study/java-spi/spi-impl/src/main/java/com/xjs/service/impl/HumanHelloService.java @@ -0,0 +1,14 @@ +package com.xjs.service.impl; + +import com.xjs.service.HelloService; + +/** + * @author xiejs + * @since 2022-05-23 + */ +public class HumanHelloService implements HelloService { + @Override + public String sayHello() { + return "Hello 你好!"; + } +} diff --git a/xjs-study/java-spi/spi-impl/src/main/resources/META-INF/services/com.xjs.service.HelloService b/xjs-study/java-spi/spi-impl/src/main/resources/META-INF/services/com.xjs.service.HelloService new file mode 100644 index 00000000..9693dc6c --- /dev/null +++ b/xjs-study/java-spi/spi-impl/src/main/resources/META-INF/services/com.xjs.service.HelloService @@ -0,0 +1,3 @@ +com.xjs.service.impl.HumanHelloService +com.xjs.service.impl.DogHelloService + diff --git a/xjs-study/java-spi/spi-main/pom.xml b/xjs-study/java-spi/spi-main/pom.xml new file mode 100644 index 00000000..0fc393d4 --- /dev/null +++ b/xjs-study/java-spi/spi-main/pom.xml @@ -0,0 +1,33 @@ + + + + java-spi + com.xjs + 1.0 + + 4.0.0 + JavaSPI调用 + + spi-main + + + 11 + 11 + + + + + com.xjs + spi-api + 1.0 + + + com.xjs + spi-impl + 1.0 + + + + diff --git a/xjs-study/java-spi/spi-main/src/main/java/com/xjs/JavaSpiMain.java b/xjs-study/java-spi/spi-main/src/main/java/com/xjs/JavaSpiMain.java new file mode 100644 index 00000000..3329404a --- /dev/null +++ b/xjs-study/java-spi/spi-main/src/main/java/com/xjs/JavaSpiMain.java @@ -0,0 +1,20 @@ +package com.xjs; + +import com.xjs.service.HelloService; + +import java.util.ServiceLoader; + +/** + * @author xiejs + * @since 2022-05-23 + */ +public class JavaSpiMain { + + public static void main(String[] args) { + final ServiceLoader helloServices = ServiceLoader.load(HelloService.class); + for (HelloService helloService : helloServices) { + System.out.println(helloService.getClass().getName()+":"+helloService.sayHello()); + } + } + +} diff --git a/xjs-study/pom.xml b/xjs-study/pom.xml index d8ee18c0..ddec18ca 100644 --- a/xjs-study/pom.xml +++ b/xjs-study/pom.xml @@ -14,6 +14,7 @@ xjs-study-base netty-project dubbo-project + java-spi xjs-study