本人翻译目的是用来学习Tapestry5的,共享出来希望大家批评指正。计划持续翻译。

符号
Tapestry IOC
使用运行时
-
评估符号
(runtime-evaluated symbols)
处理配置任务的特定类型。
符号的语法格式基于
Ant
表达式,也就是说,第一位为
$ {
符号名前,然后结尾
}
在后。在内的值是这个符号名。通过命名约定,这个符号名按照周期分割。
这些符号被用在
Value
和
InjectService
标注内。
例如:
- public static MyService build(
- @InjectService("${some-service-id}") Collaborator collab)
- {
- return . . . ;
- }
这里,符号
some-service-id
是一个服务
id,
比如
WackyCollaborator
。
尽管
没在这里显示, 以符号在字符串、或混合实字文本内使用多个符号是可能的。
符号解析
符号通过
SymbolSource
服务处理。
SymbolSource
核对一个
SymbolProvider
对象的有序列表。
另外的符号提供器可以通过贡献给
tapestry.ioc.SymbolSource
服务配置被使用,这个配置是一个有序的
SymbolProviders
列表。
默认,有三个提供器:
1.
SystemProperties
一个提供器允许
JVM System Properties
提供符号值。这允许使用
java
命令的
–D
选项
来提供运行时替代。当测试代码识这最常用,由于用在产品阶段。
2.
ApplicationDefaults
在
System Properties
内没有找到值,就在ApplicationDefaults内搜索。这个服务,ApplicationDefaults可以使用映像配置提供值。
来自前面的例子:
public void contributeApplicationDefaults(MappedConfiguration<String, String> configuration) { configuration.add("some-service-id", "WackyCollaborator"); }
3.
FactoryDefaults
与
ApplicationDefaults
一样,但只有在如果通过
SystemProperties
或
ApplicationDefaults
提供的值不满意的时候才核对。
Libraries
将会代表性的设置合理的默认作为贡献给
FactoryDefaults
服务配置。个别的应用可能硬编码替代那些
ApplicationDefalults
默认应用。个别的开发者甚至可能通过设置
JVM System Properties
替换那些默认。
递归符号
这是可能并有效的根据一个或多个符号定一个符号。
- public void contributeFactoryDefaults(MappedConfiguration<String, String> configuration)
- {
- configuration.add("report.url", "http://${report.host}:${report.port}/${report.path}");
- configuration.add("report.host", "www.myreportsite.com");
- configuration.add("report.port", "80");
- configuration.add("report.path", "/report.cgi");
- }
对于
report.url
的默认将会是
http://www.myreportsite.com:80/report.cgi.
然而,这可以通过制造一个替代的贡献给
ApplicationDefaults
服务配置来改变。
Tapestry
检查没有符号直接或间接的依赖自身。例如,下面的贡献是违法的:
- public void contributeApplicationDefaults(MappedConfiguration<String, String> configuration)
- {
- configuration.add("report.path", "${report.url}/report.cgi");
- }
当
report.url
被引用,一个异常将抛出信息是:符号
'report.path'
被递归定义(
(report.path --> report.url --> report.path
)。