我有一个作为后台进程执行服务调用的插件。也就是说,它在计时器上执行一些与任何用户操作没有直接关系的操作。
我需要做的是每次该服务调用完成时在“主”应用程序中执行一些代码。有没有办法挂钩该插件代码?我可以访问插件代码,因此更改它并不是一个巨大的障碍。
我有一个作为后台进程执行服务调用的插件。也就是说,它在计时器上执行一些与任何用户操作没有直接关系的操作。
我需要做的是每次该服务调用完成时在“主”应用程序中执行一些代码。有没有办法挂钩该插件代码?我可以访问插件代码,因此更改它并不是一个巨大的障碍。
您可以让您的插件服务在完成时发布一个事件,然后在您的主应用程序中监听该事件。我已经使用过这种模式几次,它是一种非常方便的方式来解耦我的应用程序的各个部分。为此,请创建一个事件类。
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,但你需要将它配置为内部的 spring bean resources.groovy
。
我最近一直在使用这种方法,它对我来说效果很好。它绝对是您的 Grails 工具箱中的一个不错的工具。