EchoService
2024-08-29 01:17:18
dubbo为consumer端的代理对象实现了EchoService接口。
使用示例:
<dubbo:reference id="hello" interface="com.zhang.HelloService" check="false" />
EchoService echoService = (EchoService) appCtx.getBean("hello");
Object str = echoService.$echo("zhang");
原理:
public interface EchoService {
Object $echo(Object message);
}
//AbstractProxyFactory
public <T> T getProxy(Invoker<T> invoker) throws RpcException {
Class<?>[] interfaces = null;
String config = invoker.getUrl().getParameter("interfaces");
if (config != null && config.length() > 0) {
String[] types = Constants.COMMA_SPLIT_PATTERN.split(config);
if (types != null && types.length > 0) {
interfaces = new Class<?>[types.length + 2];
interfaces[0] = invoker.getInterface();
interfaces[1] = EchoService.class;
for (int i = 0; i < types.length; i ++) {
interfaces[i + 1] = ReflectUtils.forName(types[i]);
}
}
}
if (interfaces == null) {
//加入了EchoService接口
interfaces = new Class<?>[] {invoker.getInterface(), EchoService.class};
}
//JavassistProxyFactory和JdkProxyFactory分别实现EchoService接口
return getProxy(invoker, interfaces);
}
provider在EchoFilter中处理$echo请求:
@Activate(group = Constants.PROVIDER, order = -110000)
public class EchoFilter implements Filter {
public Result invoke(Invoker<?> invoker, Invocation inv) throws RpcException {
if(inv.getMethodName().equals(Constants.$ECHO)
&& inv.getArguments() != null && inv.getArguments().length == 1)
return new RpcResult(inv.getArguments()[0]);
return invoker.invoke(inv);
}
}
最新文章
- 《Java编程思想》学习笔记(二)——类加载及执行顺序
- 关于WEB Service&;WCF&;WebApi实现身份验证之WebApi篇
- 浅谈CommandBehavior枚举的独特之处
- html5实战2
- javascript平时小例子⑥(简易计算器的制作)
- Android TextView结合SpannableString使用
- js学习--DOM操作详解大全二(window对象)
- -_-#【Better Code】字符串匹配
- Android 百度地图 SDK v3.0.0 (一)
- Draggable(拖动)组件
- iOS 视图调试器(Debug View Hierarchy) 之 初试牛刀
- 手机自动化测试:Appium源码之api(1)
- Thread in Java
- ●POJ 1509 Glass Beads
- bzoj 1899: [Zjoi2004]Lunch 午餐
- 11_Android中HttpClient的应用,读取网络xml及xml解析流,Handler的应用,LayoutInflater的使用,SmartImageView的使用
- noi.ac#309 Mas的童年(子集乱搞)
- ubuntu16.04 使用kinectv2跑Elasticfusion
- Redis:MySQL算老几?
- 20155334 《网络攻防》 Exp6 信息搜集与漏洞扫描
热门文章
- Lombok让pojo变得更优雅
- 深入JAVA注解之方法注解
- switch to hexo !
- inotify工具安装配置
- 20165211 2017-2018-2 《Java程序设计》第6周学习总结
- BZOJ 3529 数表(莫比乌斯+树状数组)
- rvm 安装ruby环境报错curl: (35) error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
- The superclass ";javax.servlet.http.HttpServlet"; was not found on the Java Build Path 解决方法
- 怎样借助Python爬虫给宝宝起个好名字--python 学习
- React Native控件之Switch开关