一般dubbo和spring的用法就是直接通過xml配置文件,寫關(guān)于<dubbo:>相關(guān)標(biāo)簽去引用所需要的service
但如果這么做的話澎剥,就沒有松耦合了,所有的服務(wù)都依賴于dubbo的東西赶舆,日后如果換rpc框架的時候就比較麻煩了哑姚。
所以,我們利用spring 初始化bean的時候芜茵,再按照需要把dubbo的bean暴露出去叙量。
dubbo最主要分為兩邊,
refrence
首先寫一個實現(xiàn)類繼承ContextAnnotationAutowireCandidateResolver
然后實現(xiàn)如下接口
BeanFactoryPostProcessor
復(fù)寫? postProcessBeanFactory九串,獲取factory , 調(diào)用setAutowireCandidateResolver把當(dāng)前寫的這個解析器注入
ApplicationContextAware?
復(fù)寫setApplicationContext ?獲取applcationcontext
EnvironmentAware
setEnvironment 獲取env ?這個能獲取 application.properties相關(guān)配置
InitializingBean
getSuggestedValue 過濾 @RemoteService 注解的 接口绞佩,返回dubbo包裝后的refrencebean
特別提一點 ,這里可以用CacheBuilder.newBuilder().build(loader)
這樣的話猪钮,在一個應(yīng)用就可以保持只有一個bean.
exporter
寫一個實現(xiàn)類
實現(xiàn)
InitializingBean
afterPropertiesSet
這個方法里面品山,找到自己定義的api路徑下的那些接口,生成對應(yīng)的exporter烤低,暴露出去就行肘交。
,ApplicationContextAware
,EnvironmentAware
,DisposableBean
destroy
特別擴展了filter
寫一個子類繼承它,復(fù)寫Resultinvoke(Invokerinvoker,Invocationinvocation)
主要是判斷是自己項目的類扑馁,就直接返回結(jié)果涯呻,不需要經(jīng)過com.alibaba.dubbo.rpc.RpcResult.RpcResult(Throwableexception)的封裝