原创作者: chinajavawolf   阅读:1666次   评论:0条   更新时间:2011-05-26    
本人翻译目的是用来学习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服务)然后直接调用方法,不用反射,与你自己写的代码比没有区别。
 
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

文章信息

Global site tag (gtag.js) - Google Analytics