zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    <td>标签clospan和rowspan 可横跨列数和行数
    网线水晶头接法
    安装在墙上的网线接口坏了的处理方法
    php array 数组及数组索引
    php strpos返回字符串首次出现的位置
    escape()、encodeURI()、encodeURIComponent()区别详解
    smarty assign 赋值
    二叉搜索树(搜索二叉树)转换成一个双向链表
    new malloc和delete free 的区别
    两个栈实现一个队列
  • 原文地址:https://www.cnblogs.com/toUpdating/p/9107074.html
Copyright © 2011-2022 走看看