Dubbo(二)-----------可扩展机制-----SPI

文档:http://dubbo.apache.org/zh-cn/docs/dev/SPI.html

subscribe:订阅

本地注册:我注册的接口和实现类

dubbo:有三个概念

URL:统一资源定位器(简单理解为总线)       dubbo中服务,注册中心,消费者,配置信息。。。都是资源

Invoke:可执行体     提供方:用于调用服务提供类                     消费方:用于执行远程调用

Invocation:调用对象(封装接口名,方法名,形列表。。。。)

 ExtensionLoader<Car> extensionLoader =
                ExtensionLoader.getExtensionLoader(Car.class);
EXTENSION_LOADERS:放入(接口,ExtensionLoader)
getExtensionClasses()---Map
cachedDefaultName:默认的类名

DUBBO_INTERNAL_DIRECTORY = META-INF/dubbo/internal/
DUBBO_DIRECTORY = META-INF/dubbo/
SERVICES_DIRECTORY = META-INF/services/

从一直调用到getExtension()---->loadClass()方法

 

 injectExtension(instance);
 Set<Class<?>> wrapperClasses = cachedWrapperClasses;    //缓存包装类
 if (CollectionUtils.isNotEmpty(wrapperClasses)) {
   for (Class<?> wrapperClass : wrapperClasses) {
    instance = injectExtension((T)wrapperClass.getConstructor(type).newInstance(instance));
   }
}

调用包装类,像递归一层一层调用 并更改值wrapperClass.getConstructor(type).newInstance(instance)
    public T getAdaptiveExtension() {
        Object instance = cachedAdaptiveInstance.get();
        if (instance == null) {
            if (createAdaptiveInstanceError == null) {
                synchronized (cachedAdaptiveInstance) {
                    instance = cachedAdaptiveInstance.get();
                    if (instance == null) {
                        try {
                            instance = createAdaptiveExtension();   //自适应,代理类(实现了接口),从url中取值

 

使用自动注入时:dubbo生成接口的代理类,然后通过url找到实现类,—————>包装类------>执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值