You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@dubbo.apache.org by "kexianjun (GitHub)" <gi...@apache.org> on 2018/12/06 09:06:22 UTC

[GitHub] [incubator-dubbo] kexianjun opened issue #2896: dubbo spi自动注入疑问

关于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 notifications@dubbo.apache.org

[GitHub] [incubator-dubbo] beiwei30 closed issue #2896: dubbo spi自动注入疑问

Posted by "beiwei30 (GitHub)" <gi...@apache.org>.
[ issue closed by beiwei30 ]

[ Full content available at: https://github.com/apache/incubator-dubbo/issues/2896 ]
This message was relayed via gitbox.apache.org for notifications@dubbo.apache.org


[GitHub] [incubator-dubbo] beiwei30 commented on issue #2896: dubbo spi自动注入疑问

Posted by "beiwei30 (GitHub)" <gi...@apache.org>.
并不是这个样子的,你可以对照看下 http://dubbo.apache.org/zh-cn/docs/dev/SPI.html

[ Full content available at: https://github.com/apache/incubator-dubbo/issues/2896 ]
This message was relayed via gitbox.apache.org for notifications@dubbo.apache.org