Groovy约定:我应该把metaClass定义放在哪里?

3

我开始向一个现有的Java Web应用程序中添加一些Groovy类。(这不是一个Grails应用程序)

是否有一个约定,我应该遵循在哪里定义我的metaClass扩展?

此外,我编写了一些扩展来协助单元测试。目前,它们位于测试基类的@Before中,但我怀疑应该有一个更明显的地方设置这些内容。

非常感谢任何建议。

2个回答

5
另一个选择是使用Groovy的自定义MetaClasses命名约定。只要你遵循这个约定(groovy.runtime.metaclass.[package].[class]MetaClass),并且将代码与应用程序代码一起编译,那么就不会有问题。查看此文章获取更多信息。它还提供了一个很好的示例。

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注释选择要应用扩展的单元测试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接