在看 protrocol 扩展点时, 发现很费解的一点: 当前 invoker 的 url 是 register 协议, 在 export 的时候都会从 qos->lister->filer 这 3 个包装类开始, 看了一下 getExtension() 的过程, createExtension() 里有这样一些代码:
- // 装饰器类, 用来增加扩展实现.
- Set<Class<?>> wrapperClasses = cachedWrapperClasses;
- if (wrapperClasses != null && !wrapperClasses.isEmpty()) {
- for (Class<?> wrapperClass : wrapperClasses) {
- instance = injectExtension((T) wrapperClass.getConstructor(type).newInstance(instance));
- }
- }
可以看到当前扩展点的包装类会被缓存起来并且 RegisterProtocol 会在自动最里面被包三层, 之后实例才返回, 所以这个扩展点在 getExtension() 都会被包三层
来源: http://www.bubuko.com/infodetail-3281680.html