1.前言
在spring aop中可以使用多個切面對指定類的方法進行增強,在dubbo中也提供了類似的功能,在dubbo中你可以指定多個wrappwe類對指定的擴展點的實現的方法進行增強。也就是通過SPI返回的不再是純粹的擴展點的實現類,而是被wrapper後的類。
2.一般情況
private static final Protocol protocol = ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtension();
如果說沒有spi擴展點增加自動裝配,上面的代碼返回的就是適配“dubbo”protocol的DubboProtocol類。
3.SPI擴展增強的實現
private static final Protocol protocol = ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtension();
增強後上述代碼的執行流程,
1.判斷 registry 是不是等於 dubbo,等於加載registry協議,不等於就執行2。
2.判斷Registry的構造方法,觀察構造函數中是否存在Protocol聲明定義的變量,如果有則作爲dubbo協議的包裝類進行加載,如果沒有則重新跳回1驗證下一條記錄filter。
3.從名字中我們也可以看出filter和listener實現2個對dubbo協議擴展的包裝類,中filter包裝了dubbo的鏈式調用,輕鬆的實現
aop的功能。
4.dubbo具體是如果實現增加擴展的