grails:afterInterceptor / beforeInterceptor for Service?

时间:2015-12-08 18:12:23

标签: grails interceptor

我们有一个Grails 2.5应用程序,它有一个Quartz作业,它调用一个服务方法(关闭过期的会话)。

我们有一个基础和美国版本的应用程序。美国版本需要做一些额外的事情,我们通常会在美国特定的爆炸插件中做这些事情来分离逻辑。

但是,我们无法想到一种“挂钩”的方式。在java中,我们将定义一个接口,并使用某种工厂来提取正确的方法。或类似过滤器链接。做这样的事情的grails方式是什么?

我们显然可以在基本系统中硬编码额外的USA逻辑,例如。

Session closeSession(Sesssion session) {
        session.endedAt = new Date()
        session.save()

        // USA stuff hacked in here:
        if (SOME_ENVIRONMENT_VAR == "usa") {
            // call some complicated function in its own transaction so 
            // if it fails it doesnt affect closing the session
            com.something.something.complicatedFunction(session)
        }
        // end USA hack

        return session.
}

然而,这有一个巨大的缺点,我们的基本系统现在必须包含USA插件 - 它在两者之间创建了编译时依赖。

什么是理想的是像afterInterceptor,但对于服务类。

我们可以使用观察者模式,并在爆炸插件的引导程序中注册观察者。这将允许我们在没有美国代码的情况下编译非美国系统。拦截器虽然更加优雅。

0 个答案:

没有答案