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