我開始爲現有的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註釋來選擇要應用您的擴展的單元測試。