论坛首页 Java企业应用论坛

(C15)Tapestry IoC:Service Builders Shadow Services

浏览 3493 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-05-28  
本人翻译目的是用来学习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服务)然后直接调用方法,不用反射,与你自己写的代码比没有区别。
 
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics