我开始在现有的Java Web应用程序中添加一些Groovy类。 (这不是Grails应用程序)
我应该遵循哪个约定来定义我的metaClass扩展?
另外,我已经写了一些扩展用于协助单元测试。目前,它们位于基类的@Before
中进行测试,但我怀疑有一个更明显的地方我应该设置它们。
任何建议都非常感谢。
答案 0 :(得分:5)
另一个选择是使用Groovy的自定义MetaClasses命名约定。只要您遵守约定(groovy.runtime.metaclass.[package].[class]MetaClass
)并使用应用程序代码编译代码就可以了。有关详细信息,请查看此posting。它也提供了一个很好的例子。
答案 1 :(得分:0)
如果它是Grails应用程序,我会说它放在grails-app/conf/BootStrap.groovy
。在任何其他Java Web应用程序中,您只需编写一个ServletContextListener
实现,该实现将触发Web上下文初始化和销毁。在web.xml
。
public class MetaClassInitializationListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) {
// do metaClass work
}
public void contextDestroyed(ServletContextEvent event) {
}
}
对于单元测试,基类对我来说听起来很合理。如果您正在使用JUnit,您还可以编写BlockJUnit4ClassRunner的实现。然后,您可以使用@RunWith注释选择要应用扩展程序的单元测试。