2012-03-31 61 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这应该具有预期的效果。