dubboreference注解_dubbo-Reference注解改进1.dubbo服务过多引⽤的问题
1.1 dubbo服务以xml配置消费者
由于引⽤多个dubbo服务时,在未使⽤前⽆法得知需要使⽤哪个接⼝,如果以xml配置的形式来调⽤,应该如下代码
代码⽰例1
1.2 dubbo服务膨胀的问题
由于需求不断变更,引⽤的dubbo服务不断增多,这时候配置将会如下
代码⽰例2
......
实际项⽬中引⽤的服务会更多,维护该xml的数量将⾮常庞⼤,不利于团队之间的合作开发
1.3 使⽤Reference注解的形式
使⽤注解后,就可以在实际情况下引⽤即可,⾮常⽅便
代码⽰例3
@Reference
privateUserServiceuserService;
2.Reference注解的问题
当需要配置某个模块的version和group时,希望能够统⼀修改,与配置中⼼绑定
使⽤注解时,当在⽗类使⽤该注解时不⽣效,因为Reference注解并未对⽗类⽅法和字段进⾏解析
代码⽰例4
@Reference(version="1.0",group="app")
privateUserServiceuserService;
@Reference(version="userModule.version",group="up")
privateUserServiceuserService;
/
/此为⽰例代码,Value注解应该能够理解
@Value("userModule.version")
privateStringversion;
2.1 改造的切⼊点AnnotationBean
Reference注解由AnnotationBean进⾏解析,所以第⼀步是对AnnotationBean进⾏改造.
思路如下:
将version和group相关需要的全局配置改造成与配置中⼼相关联
xml去除dubbo:annotation配置
同时对⽗类⽅法和字段进⾏解析
3.动态获取dubbo接⼝
有时候需要在某些场景,静态获取dubbo接⼝,就像Spring中ApplicationContext中getBean⽅法⼀样 实际其内部还是构造⼀个ReferenceBean对象
代码⽰例5
publicstaticT getDubboBean(ClassreferenceClass,Stringversion){
if(referenceClass==null){
thrownewIllegalStateException("请输⼊接⼝类型");
}elseif(!referenceClass.isInterface()){
thrownewIllegalStateException("The @Reference undefined interfaceClass or interfaceName, and the property type "+Name()+" is not a interface.");
}
Name();reference group
Stringkey=interfaceName;
ReferenceBean>(key);
if(referenceConfig==null){
referenceConfig=newReferenceBean();
referenceConfig.setInterfaceClass(referenceClass);
}
ApplicationContext()!=null){
referenceConfig.ApplicationContext());
try{
referenceConfig.afterPropertiesSet();
}catch(RuntimeExceptione){
throw(RuntimeException)e;
}catch(Exceptione){
Message(),e);
}
}
referenceConfigs.putIfAbsent(key,referenceConfig);
(key);
referenceConfig.setVersion(version);
//获取配置中⼼配置
PropertiestValue("dubbomon.version");
PropertiestValue("up");
if(SysStringUtils.isNotEmpty(version))
{
referenceConfig.setVersion(version);
}
if(SysStringUtils.isNotEmpty(group))
{
referenceConfig.setGroup(group);
}
T obj=null;
try{
if(referenceConfig!=null){
obj=(();
}
}catch(Exceptione){
}
returnobj;
}
以上⽅案为2.5.3版本中的⽅案 Reference注解已经在dubbo新版本中标记为废弃,所以提早记录下

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。