模块的自动加载只需“插入”包含模块的JAR即可将新功能添加到应用程序中:模块中的服务与任何配置或其他支持代码和资源一起自动集成到整个服务注册表中。
这方面的一个例子是磁带上传该库引入了Upload组件,以及与处理文件上传请求相关的支持服务。
核心Tapestry IoC模块会自动包含在内。当使用Tapestry web框架时,还包括核心Tapestri模块,以及可选的每个应用程序模块,以及任何自动加载的模块。
模块自动加载不是100%免费的。。。您必须告诉Tapestry IoC要加载的模块的位置,这可以通过Manifest文件条目或注释完成。
JAR清单条目
在设置注册表时,Tapestry可以自动定位打包到JAR中的模块。它通过搜索特定的全局清单条目来实现这一点。
清单条目名称为“Tapestry-Module-Classes”。该值是模块类的完全限定类名的逗号分隔列表(这允许单个JAR包含多个相关模块)。空白被忽略。
例子:
清单版本:1.0磁带模块类:org.example.mylib。LibModule,org.example.mylib.internal。内部模块
如果您使用的是Maven 2,那么将这些条目放入JAR清单就像pom.xml中的一些配置一样简单:
<项目>。<构建><插件><插件>org.apache.maven.plugins<artifactId>maven jar插件</artifactId><配置><存档><宣言条目><Tapestry-Module-Classes>org.example.mylib。库模块,org.example.mylib.internal。内部模块</Tapestry-Module-Classes></manifestEntries></archive></配置></插件></插件></构建>。</项目>
有关更多详细信息,请参阅Maven清单指南.
子模块注释
通常,您会有几个不同的模块一起工作,这些模块都应该作为一个单元加载。
一种方法是将模块ID更新到清单中,如前一个扩展所示。
面对重构(例如类或包的重命名),这可能会变得单调乏味,甚至有些脆弱。
更好的选择是@导入模块注释(@子模块如果使用低于5.4的Tapestry版本)。
此注释的值是额外的类被视为模块类,就像它们在清单中被标识一样。尽管名称如此,Tapestry IoC中没有模块层次结构。
例子:
@导入模块({内部转换模块.class})公共期末课InternalModule{。
通常,您只需要在JAR清单中标识一个模块,并使用@SubModule拉入任何其他模块类。