我有一个插件,它将服务调用作为后台进程执行。也就是说,它会对与任何用户操作无直接关系的计时器执行某些操作。
我需要做的是在" main"中执行一些代码。每次此服务呼叫结束时应用程序。有没有办法挂钩该插件代码?我可以访问插件代码,因此改变它并不是一个巨大的障碍。
答案 0 :(得分:2)
您可以让插件服务在完成后发布事件,然后在主应用程序中侦听该事件。我已经使用过几次这种模式,这是一种非常方便的方法来解耦我的应用程序的各个部分。为此,请创建一个event类。
class PluginEvent extends ApplicationEvent {
public PluginEvent(source) {
super(source)
}
}
然后,让你的插件服务实现ApplicationContextAware
。这为您的插件提供了发布活动的方式
class PluginService implements ApplicationContextAware {
def applicationContext
def serviceMethod() {
//do stuff
publishPluginEvent()
}
private void publishPluginEvent() {
def event = new PluginEvent(this)
applicationContext.publishEvent(event)
}
}
然后在主应用程序中,创建一个将在发布事件时响应的侦听器服务:
class ApplicationService implements ApplicationListener<PluginEvent> {
void onApplicationEvent(PluginEvent event) {
//whatever you want to do in your app when
// the plugin service fires.
}
}
此侦听器不需要是Grails服务,您只需使用POJO / POGO,但您需要将其配置为resources.groovy
内的spring bean。
我最近一直在使用这种方法,它对我来说效果很好。它绝对是Grails工具箱中的一个很好的工具。