我开始为现有的Java Web应用程序添加一些Groovy类。 (这不是一个Grails应用程序)Groovy约定:我在哪里放置metaClass定义?
是否有一个约定,我应该遵循在哪里定义我的metaClass扩展?
另外,我已经写了一些扩展来协助单元测试。目前,这些测试在基类的@Before
,但我怀疑有一个更明显的地方,我应该设置这些。
任何建议非常感谢。
我开始为现有的Java Web应用程序添加一些Groovy类。 (这不是一个Grails应用程序)Groovy约定:我在哪里放置metaClass定义?
是否有一个约定,我应该遵循在哪里定义我的metaClass扩展?
另外,我已经写了一些扩展来协助单元测试。目前,这些测试在基类的@Before
,但我怀疑有一个更明显的地方,我应该设置这些。
任何建议非常感谢。
另一种选择是对自定义MetaClass使用Groovy的命名约定。只要你坚持约定(groovy.runtime.metaclass.[package].[class]MetaClass
),并且用你的应用程序代码编译代码,你应该没问题。查看posting了解更多信息。它也提供了一个很好的例子。
如果它本来是一个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注释来选择要应用您的扩展的单元测试。