dubbo adaptive

com.alibaba.dubbo.common.extension.ExtensionLoader<T> 这个类是dubbo 实现SPI关键

dubbo中  refer()方法时 Protocol中动态类

Protocol$Adaptive

 1 package com.alibaba.dubbo.rpc;
 2 
 3 import com.alibaba.dubbo.common.extension.ExtensionLoader;
 4 
 5 
 6 public class Protocol$Adaptive implements com.alibaba.dubbo.rpc.Protocol {
 7     public void destroy() {
 8         throw new UnsupportedOperationException(
 9             "method public abstract void com.alibaba.dubbo.rpc.Protocol.destroy() of interface com.alibaba.dubbo.rpc.Protocol
10            is not adaptive method!");
11     }
12 
13     public int getDefaultPort() {
14         throw new UnsupportedOperationException(
15             "method public abstract int com.alibaba.dubbo.rpc.Protocol.getDefaultPort() of interface com.alibaba.dubbo.rpc.Protocol
16            is not adaptive method!");
17     }
18 
19     public com.alibaba.dubbo.rpc.Exporter export(
20         com.alibaba.dubbo.rpc.Invoker arg0)
21         throws com.alibaba.dubbo.rpc.RpcException {
22         if (arg0 == null) {
23             throw new IllegalArgumentException(
24                 "com.alibaba.dubbo.rpc.Invoker argument == null");
25         }
26 
27         if (arg0.getUrl() == null) {
28             throw new IllegalArgumentException(
29                 "com.alibaba.dubbo.rpc.Invoker argument getUrl() == null");
30         }
31 
32         com.alibaba.dubbo.common.URL url = arg0.getUrl();
33         String extName = ((url.getProtocol() == null) ? "dubbo"
34                                                       : url.getProtocol());
35 
36         if (extName == null) {
37             throw new IllegalStateException(
38                 "Fail to get extension(com.alibaba.dubbo.rpc.Protocol) name from url(" +
39                 url.toString() + ") use keys([protocol])");
40         }
41 
42         com.alibaba.dubbo.rpc.Protocol extension = 
43        (com.alibaba.dubbo.rpc.Protocol) ExtensionLoader.getExtensionLoader(com.alibaba.dubbo.rpc.Protocol.class)
44                                                                                               .getExtension(extName);
45 
46         return extension.export(arg0);
47     }
48 
49     public com.alibaba.dubbo.rpc.Invoker refer(java.lang.Class arg0,
50         com.alibaba.dubbo.common.URL arg1)
51         throws com.alibaba.dubbo.rpc.RpcException {
52         if (arg1 == null) {
53             throw new IllegalArgumentException("url == null");
54         }
55 
56         com.alibaba.dubbo.common.URL url = arg1;
57         String extName = ((url.getProtocol() == null) ? "dubbo"
58                                                       : url.getProtocol());
59 
60         if (extName == null) {
61             throw new IllegalStateException(
62                 "Fail to get extension(com.alibaba.dubbo.rpc.Protocol) name from url(" +
63                 url.toString() + ") use keys([protocol])");
64         }
65 
66         com.alibaba.dubbo.rpc.Protocol extension = 
67         (com.alibaba.dubbo.rpc.Protocol) ExtensionLoader.getExtensionLoader(com.alibaba.dubbo.rpc.Protocol.class)
68                                                                                            .getExtension(extName);
69 
70         return extension.refer(arg0, arg1);
71     }
72 }
73  

 ProxyFactory$Adaptive

 1 package com.alibaba.dubbo.rpc;
 2 
 3 import com.alibaba.dubbo.common.extension.ExtensionLoader;
 4 
 5 
 6 public class ProxyFactory$Adaptive implements com.alibaba.dubbo.rpc.ProxyFactory {
 7     public com.alibaba.dubbo.rpc.Invoker getInvoker(java.lang.Object arg0,
 8         java.lang.Class arg1, com.alibaba.dubbo.common.URL arg2)
 9         throws com.alibaba.dubbo.rpc.RpcException {
10         if (arg2 == null) {
11             throw new IllegalArgumentException("url == null");
12         }
13 
14         com.alibaba.dubbo.common.URL url = arg2;
15         String extName = url.getParameter("proxy", "javassist");
16 
17         if (extName == null) {
18             throw new IllegalStateException(
19                 "Fail to get extension(com.alibaba.dubbo.rpc.ProxyFactory) name from url(" +
20                 url.toString() + ") use keys([proxy])");
21         }
22 
23         com.alibaba.dubbo.rpc.ProxyFactory extension = (com.alibaba.dubbo.rpc.ProxyFactory) ExtensionLoader.getExtensionLoader(com.alibaba.dubbo.rpc.ProxyFactory.class)
24                                                                                                            .getExtension(extName);
25 
26         return extension.getInvoker(arg0, arg1, arg2);
27     }
28 
29     public java.lang.Object getProxy(com.alibaba.dubbo.rpc.Invoker arg0)
30         throws com.alibaba.dubbo.rpc.RpcException {
31         if (arg0 == null) {
32             throw new IllegalArgumentException(
33                 "com.alibaba.dubbo.rpc.Invoker argument == null");
34         }
35 
36         if (arg0.getUrl() == null) {
37             throw new IllegalArgumentException(
38                 "com.alibaba.dubbo.rpc.Invoker argument getUrl() == null");
39         }
40 
41         com.alibaba.dubbo.common.URL url = arg0.getUrl();
42         String extName = url.getParameter("proxy", "javassist");
43 
44         if (extName == null) {
45             throw new IllegalStateException(
46                 "Fail to get extension(com.alibaba.dubbo.rpc.ProxyFactory) name from url(" +
47                 url.toString() + ") use keys([proxy])");
48         }
49 
50         com.alibaba.dubbo.rpc.ProxyFactory extension = (com.alibaba.dubbo.rpc.ProxyFactory) ExtensionLoader.getExtensionLoader(com.alibaba.dubbo.rpc.ProxyFactory.class)
51                                                                                                            .getExtension(extName);
52 
53         return extension.getProxy(arg0);
54     }
55 }

 Cluster$Adaptive

 1  package com.alibaba.dubbo.rpc.cluster;
 2  
 3  import com.alibaba.dubbo.common.extension.ExtensionLoader;
 4  
 5  
 6  public class Cluster$Adaptive implements com.alibaba.dubbo.rpc.cluster.Cluster {
 7      public com.alibaba.dubbo.rpc.Invoker join(
 8          com.alibaba.dubbo.rpc.cluster.Directory arg0)
 9          throws com.alibaba.dubbo.rpc.RpcException {
10          if (arg0 == null) {
11              throw new IllegalArgumentException(
12                  "com.alibaba.dubbo.rpc.cluster.Directory argument == null");
13          }
14  
15          if (arg0.getUrl() == null) {
16              throw new IllegalArgumentException(
17                  "com.alibaba.dubbo.rpc.cluster.Directory argument getUrl() == null");
18          }
19  
20          com.alibaba.dubbo.common.URL url = arg0.getUrl();
21          String extName = url.getParameter("cluster", "failover");
22  
23          if (extName == null) {
24              throw new IllegalStateException(
25                  "Fail to get extension(com.alibaba.dubbo.rpc.cluster.Cluster) name from url(" +
26                  url.toString() + ") use keys([cluster])");
27          }
28  
29          com.alibaba.dubbo.rpc.cluster.Cluster extension = (com.alibaba.dubbo.rpc.cluster.Cluster)                           ExtensionLoader.getExtensionLoader(com.alibaba.dubbo.rpc.cluster.Cluster.class).getExtension(extName);
30  
31          return extension.join(arg0);
32      }
33  }

CacheFactory$Adaptive

 1 package com.alibaba.dubbo.cache;
 2 
 3 import com.alibaba.dubbo.common.extension.ExtensionLoader;
 4 
 5 
 6 public class CacheFactory$Adaptive implements com.alibaba.dubbo.cache.CacheFactory {
 7     public com.alibaba.dubbo.cache.Cache getCache(
 8         com.alibaba.dubbo.common.URL arg0, com.alibaba.dubbo.rpc.Invocation arg1) {
 9         if (arg0 == null) {
10             throw new IllegalArgumentException("url == null");
11         }
12 
13         com.alibaba.dubbo.common.URL url = arg0;
14 
15         if (arg1 == null) {
16             throw new IllegalArgumentException("invocation == null");
17         }
18 
19         String methodName = arg1.getMethodName();
20         String extName = url.getMethodParameter(methodName, "cache", "lru");
21 
22         if (extName == null) {
23             throw new IllegalStateException(
24                 "Fail to get extension(com.alibaba.dubbo.cache.CacheFactory) name from url(" +
25                 url.toString() + ") use keys([cache])");
26         }
27 
28         com.alibaba.dubbo.cache.CacheFactory extension = (com.alibaba.dubbo.cache.CacheFactory) ExtensionLoader.getExtensionLoader(com.alibaba.dubbo.cache.CacheFactory.class)
29                                                                                                                .getExtension(extName);
30 
31         return extension.getCache(arg0, arg1);
32     }
33 }

MonitorFactory$Adaptive

 1 package com.alibaba.dubbo.monitor;
 2 
 3 import com.alibaba.dubbo.common.extension.ExtensionLoader;
 4 
 5 
 6 public class MonitorFactory$Adaptive implements com.alibaba.dubbo.monitor.MonitorFactory {
 7     public com.alibaba.dubbo.monitor.Monitor getMonitor(
 8         com.alibaba.dubbo.common.URL arg0) {
 9         if (arg0 == null) {
10             throw new IllegalArgumentException("url == null");
11         }
12 
13         com.alibaba.dubbo.common.URL url = arg0;
14         String extName = ((url.getProtocol() == null) ? "dubbo"
15                                                       : url.getProtocol());
16 
17         if (extName == null) {
18             throw new IllegalStateException(
19                 "Fail to get extension(com.alibaba.dubbo.monitor.MonitorFactory) name from url(" +
20                 url.toString() + ") use keys([protocol])");
21         }
22 
23         com.alibaba.dubbo.monitor.MonitorFactory extension = (com.alibaba.dubbo.monitor.MonitorFactory) ExtensionLoader.getExtensionLoader(com.alibaba.dubbo.monitor.MonitorFactory.class)
24                                                                                                                        .getExtension(extName);
25 
26         return extension.getMonitor(arg0);
27     }
28 }

 Validation$Adaptive

 1 package com.alibaba.dubbo.validation;
 2 
 3 import com.alibaba.dubbo.common.extension.ExtensionLoader;
 4 
 5 
 6 public class Validation$Adaptive implements com.alibaba.dubbo.validation.Validation {
 7     public com.alibaba.dubbo.validation.Validator getValidator(
 8         com.alibaba.dubbo.common.URL arg0) {
 9         if (arg0 == null) {
10             throw new IllegalArgumentException("url == null");
11         }
12 
13         com.alibaba.dubbo.common.URL url = arg0;
14         String extName = url.getParameter("validation", "jvalidation");
15 
16         if (extName == null) {
17             throw new IllegalStateException(
18                 "Fail to get extension(com.alibaba.dubbo.validation.Validation) name from url(" +
19                 url.toString() + ") use keys([validation])");
20         }
21 
22         com.alibaba.dubbo.validation.Validation extension = (com.alibaba.dubbo.validation.Validation) ExtensionLoader.getExtensionLoader(com.alibaba.dubbo.validation.Validation.class)
23                                                                                                                      .getExtension(extName);
24 
25         return extension.getValidator(arg0);
26     }
27 }

 RegistryFactory$Adaptive

 1 package com.alibaba.dubbo.registry;
 2 
 3 import com.alibaba.dubbo.common.extension.ExtensionLoader;
 4 
 5 
 6 public class RegistryFactory$Adaptive implements com.alibaba.dubbo.registry.RegistryFactory {
 7     public com.alibaba.dubbo.registry.Registry getRegistry(
 8         com.alibaba.dubbo.common.URL arg0) {
 9         if (arg0 == null) {
10             throw new IllegalArgumentException("url == null");
11         }
12 
13         com.alibaba.dubbo.common.URL url = arg0;
14         String extName = ((url.getProtocol() == null) ? "dubbo"
15                                                       : url.getProtocol());
16 
17         if (extName == null) {
18             throw new IllegalStateException(
19                 "Fail to get extension(com.alibaba.dubbo.registry.RegistryFactory) name from url(" +
20                 url.toString() + ") use keys([protocol])");
21         }
22 
23         com.alibaba.dubbo.registry.RegistryFactory extension = (com.alibaba.dubbo.registry.RegistryFactory) ExtensionLoader.getExtensionLoader(com.alibaba.dubbo.registry.RegistryFactory.class)
24                                                                                                                            .getExtension(extName);
25 
26         return extension.getRegistry(arg0);
27     }
28 }

 Transporter$Adaptive

 1 package com.alibaba.dubbo.remoting;
 2 
 3 import com.alibaba.dubbo.common.extension.ExtensionLoader;
 4 
 5 
 6 public class Transporter$Adaptive implements com.alibaba.dubbo.remoting.Transporter {
 7     public com.alibaba.dubbo.remoting.Client connect(
 8         com.alibaba.dubbo.common.URL arg0,
 9         com.alibaba.dubbo.remoting.ChannelHandler arg1)
10         throws com.alibaba.dubbo.remoting.RemotingException {
11         if (arg0 == null) {
12             throw new IllegalArgumentException("url == null");
13         }
14 
15         com.alibaba.dubbo.common.URL url = arg0;
16         String extName = url.getParameter("client",
17                 url.getParameter("transporter", "netty"));
18 
19         if (extName == null) {
20             throw new IllegalStateException(
21                 "Fail to get extension(com.alibaba.dubbo.remoting.Transporter) name from url(" +
22                 url.toString() + ") use keys([client, transporter])");
23         }
24 
25         com.alibaba.dubbo.remoting.Transporter extension = (com.alibaba.dubbo.remoting.Transporter) ExtensionLoader.getExtensionLoader(com.alibaba.dubbo.remoting.Transporter.class)
26                                                                                                                    .getExtension(extName);
27 
28         return extension.connect(arg0, arg1);
29     }
30 
31     public com.alibaba.dubbo.remoting.Server bind(
32         com.alibaba.dubbo.common.URL arg0,
33         com.alibaba.dubbo.remoting.ChannelHandler arg1)
34         throws com.alibaba.dubbo.remoting.RemotingException {
35         if (arg0 == null) {
36             throw new IllegalArgumentException("url == null");
37         }
38 
39         com.alibaba.dubbo.common.URL url = arg0;
40         String extName = url.getParameter("server",
41                 url.getParameter("transporter", "netty"));
42 
43         if (extName == null) {
44             throw new IllegalStateException(
45                 "Fail to get extension(com.alibaba.dubbo.remoting.Transporter) name from url(" +
46                 url.toString() + ") use keys([server, transporter])");
47         }
48 
49         com.alibaba.dubbo.remoting.Transporter extension = (com.alibaba.dubbo.remoting.Transporter) ExtensionLoader.getExtensionLoader(com.alibaba.dubbo.remoting.Transporter.class)
50                                                                                                                    .getExtension(extName);
51 
52         return extension.bind(arg0, arg1);
53     }
54 }

 Dispatcher$Adaptive

 1 package com.alibaba.dubbo.remoting;
 2 
 3 import com.alibaba.dubbo.common.extension.ExtensionLoader;
 4 
 5 
 6 public class Dispatcher$Adaptive implements com.alibaba.dubbo.remoting.Dispatcher {
 7     public com.alibaba.dubbo.remoting.ChannelHandler dispatch(
 8         com.alibaba.dubbo.remoting.ChannelHandler arg0,
 9         com.alibaba.dubbo.common.URL arg1) {
10         if (arg1 == null) {
11             throw new IllegalArgumentException("url == null");
12         }
13 
14         com.alibaba.dubbo.common.URL url = arg1;
15         String extName = url.getParameter("dispatcher",
16                 url.getParameter("dispather",
17                     url.getParameter("channel.handler", "all")));
18 
19         if (extName == null) {
20             throw new IllegalStateException(
21                 "Fail to get extension(com.alibaba.dubbo.remoting.Dispatcher) name from url(" +
22                 url.toString() +
23                 ") use keys([dispatcher, dispather, channel.handler])");
24         }
25 
26         com.alibaba.dubbo.remoting.Dispatcher extension = (com.alibaba.dubbo.remoting.Dispatcher) ExtensionLoader.getExtensionLoader(com.alibaba.dubbo.remoting.Dispatcher.class)
27                                                                                                                  .getExtension(extName);
28 
29         return extension.dispatch(arg0, arg1);
30     }
31 }

 ThreadPool$Adaptive

 1 package com.alibaba.dubbo.common.threadpool;
 2 
 3 import com.alibaba.dubbo.common.extension.ExtensionLoader;
 4 
 5 
 6 public class ThreadPool$Adaptive implements com.alibaba.dubbo.common.threadpool.ThreadPool {
 7     public java.util.concurrent.Executor getExecutor(
 8         com.alibaba.dubbo.common.URL arg0) {
 9         if (arg0 == null) {
10             throw new IllegalArgumentException("url == null");
11         }
12 
13         com.alibaba.dubbo.common.URL url = arg0;
14         String extName = url.getParameter("threadpool", "fixed");
15 
16         if (extName == null) {
17             throw new IllegalStateException(
18                 "Fail to get extension(com.alibaba.dubbo.common.threadpool.ThreadPool) name from url(" +
19                 url.toString() + ") use keys([threadpool])");
20         }
21 
22         com.alibaba.dubbo.common.threadpool.ThreadPool extension = (com.alibaba.dubbo.common.threadpool.ThreadPool) ExtensionLoader.getExtensionLoader(com.alibaba.dubbo.common.threadpool.ThreadPool.class)
23                                                                                                                                    .getExtension(extName);
24 
25         return extension.getExecutor(arg0);
26     }
27 }

 RouterFactory$Adaptive

 1 package com.alibaba.dubbo.rpc.cluster;
 2 
 3 import com.alibaba.dubbo.common.extension.ExtensionLoader;
 4 
 5 
 6 public class RouterFactory$Adaptive implements com.alibaba.dubbo.rpc.cluster.RouterFactory {
 7     public com.alibaba.dubbo.rpc.cluster.Router getRouter(
 8         com.alibaba.dubbo.common.URL arg0) {
 9         if (arg0 == null) {
10             throw new IllegalArgumentException("url == null");
11         }
12 
13         com.alibaba.dubbo.common.URL url = arg0;
14         String extName = url.getProtocol();
15 
16         if (extName == null) {
17             throw new IllegalStateException(
18                 "Fail to get extension(com.alibaba.dubbo.rpc.cluster.RouterFactory) name from url(" +
19                 url.toString() + ") use keys([protocol])");
20         }
21 
22         com.alibaba.dubbo.rpc.cluster.RouterFactory extension = (com.alibaba.dubbo.rpc.cluster.RouterFactory) ExtensionLoader.getExtensionLoader(com.alibaba.dubbo.rpc.cluster.RouterFactory.class)
23                                                                                                                              .getExtension(extName);
24 
25         return extension.getRouter(arg0);
26     }
27 }

 ConfiguratorFactory$Adaptive

 1 package com.alibaba.dubbo.rpc.cluster;
 2 
 3 import com.alibaba.dubbo.common.extension.ExtensionLoader;
 4 
 5 
 6 public class ConfiguratorFactory$Adaptive implements com.alibaba.dubbo.rpc.cluster.ConfiguratorFactory {
 7     public com.alibaba.dubbo.rpc.cluster.Configurator getConfigurator(
 8         com.alibaba.dubbo.common.URL arg0) {
 9         if (arg0 == null) {
10             throw new IllegalArgumentException("url == null");
11         }
12 
13         com.alibaba.dubbo.common.URL url = arg0;
14         String extName = url.getProtocol();
15 
16         if (extName == null) {
17             throw new IllegalStateException(
18                 "Fail to get extension(com.alibaba.dubbo.rpc.cluster.ConfiguratorFactory) name from url(" +
19                 url.toString() + ") use keys([protocol])");
20         }
21 
22         com.alibaba.dubbo.rpc.cluster.ConfiguratorFactory extension = (com.alibaba.dubbo.rpc.cluster.ConfiguratorFactory) ExtensionLoader.getExtensionLoader(com.alibaba.dubbo.rpc.cluster.ConfiguratorFactory.class)
23                                                                                                                                          .getExtension(extName);
24 
25         return extension.getConfigurator(arg0);
26     }
27 }
getExtension(extName)方法中最终调用createExtension(String name)
根据name创建相应的实例,其中
1, injectExtension() 会注入属性(如有setter方法,并且入参只有一个)
2, cachedWrapperClass 会包装实例

WrapperClass

com.alibaba.dubbo.common.extension.ExtensionLoader.createExtension(String)

501行 instance已经从RegistryFactory替换成   com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper, class com.alibaba.dubbo.rpc.protocol.ProtocolListenerWrapper

原文地址:https://www.cnblogs.com/toUpdating/p/9107074.html