Groovy约定:我在哪里放置metaClass定义?

时间:2011-03-09 14:19:36

标签: java groovy

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

我应该遵循哪个约定来定义我的metaClass扩展?

另外,我已经写了一些扩展用于协助单元测试。目前,它们位于基类的@Before中进行测试,但我怀疑有一个更明显的地方我应该设置它们。

任何建议都非常感谢。

2 个答案:

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