2011-03-09 70 views
3

我开始为现有的Java Web应用程序添加一些Groovy类。 (这不是一个Grails应用程序)Groovy约定:我在哪里放置metaClass定义?

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

另外,我已经写了一些扩展来协助单元测试。目前,这些测试在基类的@Before,但我怀疑有一个更明显的地方,我应该设置这些。

任何建议非常感谢。

回答

5

另一种选择是对自定义MetaClass使用Groovy的命名约定。只要你坚持约定(groovy.runtime.metaclass.[package].[class]MetaClass),并且用你的应用程序代码编译代码,你应该没问题。查看posting了解更多信息。它也提供了一个很好的例子。

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