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