扩展dubbo

一般dubbo和spring的用法就是直接通过xml配置文件,写关于相关标签去引用所需要的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

com.alibaba.dubbo.rpc.Filter 

写一个子类继承它,复写Resultinvoke(Invokerinvoker,Invocationinvocation)

主要是判断是自己项目的类,就直接返回结果,不需要经过com.alibaba.dubbo.rpc.RpcResult.RpcResult(Throwableexception)的封装

你可能感兴趣的:(扩展dubbo)