2012-03-31 33 views
0


我從sanitizer插件擴展MarkupSanitizerService。 我可以重寫其中一個函數 - getSanitizer(),它有我的custome實現,還是我需要從MarkupSanitizerService中複製服務類中的其他函數?
在grails中擴展插件服務

在此先感謝..

+0

它只需要擴展自定義函數。 – 2012-03-31 04:04:28

+0

爲什麼不使用元編程來替換應用程序啓動時的方法? – 2012-03-31 08:16:20

+0

感謝提示tomas – 2012-03-31 23:14:45

回答

1

大盤繼承的工作方式相同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 

    } 
    } 
} 
} 
+0

這真是一個好方法。儘管我最終擴展了服務,但這不會要求使用此服務的代碼發生任何更改。非常感謝。 – 2012-03-31 23:13:15

0

另一條路線採取將延長服務,然後在您的覆蓋消毒服務的名稱的grails-app /config/spring/resources.groovy這應該具有預期的效果。