2011-03-09 71 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註釋來選擇要應用您的擴展的單元測試。