关于dubbo spi ioc 
com.alibaba.dubbo.common.extension.ExtensionLoader#injectExtension注入这一块
```
Object object = objectFactory.getExtension(pt, property);
```
这个地方objectFactory是AdaptiveExtensionFactory,在com.alibaba.dubbo.common.extension.factory.AdaptiveExtensionFactory#getExtension
```
public <T> T getExtension(Class<T> type, String name) {
        for (ExtensionFactory factory : factories) {
            T extension = factory.getExtension(type, name);
            if (extension != null) {
                return extension;
            }
        }
        return null;
    
```
方法里面执行的时候,按照这个方法的意图应该是返回第一个不为空的扩展实例,这个循环里面遍历的时候没有异常处理,导致如果前面的factory没有获取到扩展实例抛出异常,即时后面的factory有对应的扩展实例都无法正常工作。这个地方我调试了一下,遍历的第一个factory为SpiExtensionFactory,而com.alibaba.dubbo.common.extension.factory.SpiExtensionFactory#getExtension执行的时候如果type有spi的扩展实现但是为非自适应的,就会抛出异常,也就是说这个地方的注入只能注入自适应的扩展实例了,不知道这么处理是否为有意为之?

[ Full content available at: 
https://github.com/apache/incubator-dubbo/issues/2896 ]
This message was relayed via gitbox.apache.org for 
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to