我开始向一个现有的Java Web应用程序中添加一些Groovy类。(这不是一个Grails应用程序)
是否有一个约定,我应该遵循在哪里定义我的metaClass扩展?
此外,我编写了一些扩展来协助单元测试。目前,它们位于测试基类的@Before
中,但我怀疑应该有一个更明显的地方设置这些内容。
非常感谢任何建议。
groovy.runtime.metaclass.[package].[class]MetaClass
),并且将代码与应用程序代码一起编译,那么就不会有问题。查看此文章获取更多信息。它还提供了一个很好的示例。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注释选择要应用扩展的单元测试。