我從sanitizer插件擴展MarkupSanitizerService。 我可以重寫其中一個函數 - getSanitizer(),它有我的custome實現,還是我需要從MarkupSanitizerService中複製服務類中的其他函數?
在grails中擴展插件服務
在此先感謝..
我從sanitizer插件擴展MarkupSanitizerService。 我可以重寫其中一個函數 - getSanitizer(),它有我的custome實現,還是我需要從MarkupSanitizerService中複製服務類中的其他函數?
在grails中擴展插件服務
在此先感謝..
大盤繼承的工作方式相同Java繼承。你只需要提供你的新功能與自定義實現
或者你可以花哨和使用元編程。
在常規
http://www.ibm.com/developerworks/java/library/j-pg06239/index.html
元編程的元編程的好文章是說寫或操縱其他程序(或自己)作爲他們的數據,或做在編譯工作的一部分計算機程序編寫時間,否則會在運行時完成。在許多情況下,這允許程序員在與手動編寫所有代碼相同的時間內完成更多的工作,或者它使程序更加靈活地有效地處理新的情況而不需要重新編譯
groovy supplies 2種元編程技術:編譯時間元編程和運行時元編程。
,你可以這樣做在舉調用下面應該工作
def grailsApplication
def init = { servletContext ->
soSomethingWithAService()
}
def destroy = {
}
private def doSomethingWithAService() {
grailsApplication.serviceClasses.each { serviceClass ->
// do something
def result
return result
}
}
}
}
這真是一個好方法。儘管我最終擴展了服務,但這不會要求使用此服務的代碼發生任何更改。非常感謝。 – 2012-03-31 23:13:15
另一條路線採取將延長服務,然後在您的覆蓋消毒服務的名稱的grails-app /config/spring/resources.groovy這應該具有預期的效果。
它只需要擴展自定義函數。 – 2012-03-31 04:04:28
爲什麼不使用元編程來替換應用程序啓動時的方法? – 2012-03-31 08:16:20
感謝提示tomas – 2012-03-31 23:14:45