一般dubbo和spring的用法就是直接通过xml配置文件,写关于<dubbo:>相关标签去引用所需要的service
但如果这么做的话,就没有松耦合了,所有的服务都依赖于dubbo的东西,日后如果换rpc框架的时候就比较麻烦了。
所以,我们利用spring 初始化bean的时候,再按照需要把dubbo的bean暴露出去。
dubbo最主要分为两边,
refrence
首先写一个实现类继承ContextAnnotationAutowireCandidateResolver
然后实现如下接口
BeanFactoryPostProcessor
复写 postProcessBeanFactory,获取factory , 调用setAutowireCandidateResolver把当前写的这个解析器注入
ApplicationContextAware
复写setApplicationContext 获取applcationcontext
EnvironmentAware
setEnvironment 获取env 这个能获取 application.properties相关配置
InitializingBean
getSuggestedValue 过滤 @RemoteService 注解的 接口,返回dubbo包装后的refrencebean
特别提一点 ,这里可以用CacheBuilder.newBuilder().build(loader)
这样的话,在一个应用就可以保持只有一个bean.
exporter
写一个实现类
实现
InitializingBean
afterPropertiesSet
这个方法里面,找到自己定义的api路径下的那些接口,生成对应的exporter,暴露出去就行。
,ApplicationContextAware
,EnvironmentAware
,DisposableBean
destroy
特别扩展了filter
写一个子类继承它,复写Resultinvoke(Invokerinvoker,Invocationinvocation)
主要是判断是自己项目的类,就直接返回结果,不需要经过com.alibaba.dubbo.rpc.RpcResult.RpcResult(Throwableexception)的封装
网友评论