(C15)Tapestry IoC:Service Builders Shadow Services

本人翻译目的是用来学习Tapestry5的,共享出来希望大家批评指正。计划持续翻译。
chinajavawolf  
影子服务
 
PropertyShadowBuilder 服务被用来构建一种特定的委派的服务实现。
 
有效的,它被用来允许另一个服务的属性作为它自身的服务被暴露。
例如, tapestry-core 模块提供一个 WebRequest 属性作为一个 RequestGlobals 服务的请求属性的影子。
  1. public WebRequest build()   
  2. {   
  3.  return _shadowBuilder.build(_requestGlobals, "request", WebRequest.class);   
  4. }  
 
这能作为相似的考虑:
  1. public WebRequest build()   
  2. {   
  3.  return _requestGlobals.getRequest();   
  4. }  
 
但是 , 两者之间有一个重要的区别 : 一个阴影属性重新评估每一个方法的调用 . 就前者而言 , WebRequest 服务永远得到这个请求属性的当前值从每个进程 RequestGlobals 服务中。 第二个例子更容易破碎 , 因为它会在 WebRequest 服务实现被创建时 暴露他的值在 RequestGlobals 的请求属性内
注意这个例子中 WebRequest 服务是一个普通的单例。这个服务可以被自由注入在任何服务内贯穿框架或应用。在这个服务上调用方法将经常委派给当前的进程请求。调用者不必知道这个内部委托;它仅仅发生。
 
不用反射
 
当影子被创建,反射被用来转换属性名为方法名。这个信息被用来构建一个新的类(在运行时)在服务实现时被实例化。
 
一个典型的方法实现是(大约):
  1. private RequestGlobals _source;   
  2.     
  3. public String getParameter(String name)   
  4. {   
  5.  return _source.getRequest().getParameter(name);   
  6. }  
 
也就是说 , 影子实现控制在目标对象之上 ( 在上面的例子 , RequestGlobals 服务 ) 然后直接调用方法 , 不用反射 , 与你自己写的代码比没有区别。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值