服务调用过程分析
《楚汉争霸》将会对玩家出征时的部队武将进行调整 摘要:Tuscany于8月31日发布了0.99版本,此版本较之前发布的0.91版本在结构上做了较大的调整,其服务的调用方式又重新进行了规划,本文就其服务调用过程进行探讨。 1 调用接口
public <B> getService(Class <b>businessInterface, String serviceName)
根据提供Component中定义的Service名称,以及要转换的类型取得要调用的Service接口。
参数描述:businessInterface
当前版本的businessInterface定义对Version 0.91进行了扩充,不仅支持接口,而且支持实现类,这主要是在生成代理时做了扩充,对接口类型采用JDK的ProxyFactory生成代理,而对实现类采用Cglib生成代理。
参数描述:serviceName
定义Service的名称,采用ComponentName/ServiceName的方式来表明哪个Component下的具体Service,如果Compnent下仅定义了一个Service,则此ServiceName可以省略,仅保留CompnentName。但是如果Component下定义了多个Service,则必须指明ServiceName,以标明具体的Service。这种方式与以前实现有点不同,在上一版本中对ServiceName不限制,即使Component下包含多个Service,默认取第一个Service,因为在组装是已经定义好了。
2 调用原理
Tuscany对Service的调用都会委派到RuntimeComponentContext中,把Component中的每个Service都生成Component中定义的SelfReference,然后在Reference中调用其Service,根据接口的名称生成代理。
对应的序列图如下:
业务接口调用:
在调用业务接口时会调用Proxy中的Invoke方法,在模型的组装过程中都会为每个Component的Service和Reference生成一个RuntimeWire对象,记录Service和Reference的模型组装信息。而在业务接口调用过程中,会针对Service和Reference中的每个方法生成一个InvocationChain对象,来记录调用的链。这与以前版本也有一点微小的区别,当前版本充分利用了Lazy Loading的思想,仅当调用的时候才会针对每个方法生成InvocationChain,而不象以前在组装的时候就已经把InvocationChain组装好了。
对服务的调用采用链式结构有一个比较大的好处是可以支持异步调用,如果调用的过程支持异步方式,则会在调用链的头部添加一下NonBlockingInterceptor,启动一线程进行服务的调用而不是采用阻塞的方式直接返回。同时,采用链式结构就给用户提供了一种扩展,可以在服务调用的时候添加用户自己的Interceptor,比如在调用过程中用户自己的上下文切换及调用过程的日志记录等。而且在Tuscany中针对不同类型的匹配及转换也是采用Interceptor来实现的,通过在链中添加DataBinding Interceptor,来把类型转换为需要的类型,比如字符串与XML的相互转换等。
3 结束语
Tuscany的服务调用过程给了我们许多的启示,怎样在调用中实现类型的实现转换以及采用链式调用的优点等,这可以给我们在实现的开发设计过程中提供借鉴。
查看本文来源
忻州白癜风哪家医院好乌鲁木齐哪家男科医院
孩子吃饭没胃口怎么办
- 下一页:扩展机制研究的
- 上一页:软件架构设计理念分析物业
- 06月21日奇幻外来的猫咪生了崽狗狗非但不嫌弃还充当起猫位置
- 06月21日奇幻外出期间如何训练让罗威纳犬跟随主人的脚步位置
- 06月21日奇幻给狗狗喂熟食应注意的问题位置
- 06月21日奇幻多吃水果有营养给吉娃娃吃水果有哪些注意事位置
- 06月21日奇幻多个角度分析说明狼狗是否是好养的犬种位置
- 06月21日奇幻夏季银狐犬饲养知识银狐犬夏季健康饮食位置
- 06月21日奇幻夏季蝴蝶犬饲养问题位置
- 06月20日奇幻猫很容易缺维生素吗是生长不可缺的营养物质位置
- 06月20日奇幻猫咪鼻子干位置
- 06月20日奇幻猫咪饲养常见疑难问题汇总位置
- 06月20日奇幻猫怎么洗脸猫洗脸平时需要注意的主要事项位置
- 06月20日奇幻猫咪认生怎么办如何让猫不认生位置