使用resources.groovy定义服务

时间:2011-10-07 20:01:10

标签: grails service

我正在使用resources.groovy来声明服务,例如

aService(com.foo.OrganizationService)

这样我就可以将aService绑定到我的控制器而不是使用可能在将来更改的organizationService。

我注意到,OrganizationService没有得到像resources.groovy中声明的“not”其他服务那样特殊处理。例如,它没有注入grailsApplication,可能还有一个hibernateSession等以及其他我还没有打过的东西......

现在,我知道我可以手动连接到我的服务,但我宁愿不必保持...

是否有一种特殊的方法可以在resources.groovy中声明服务,以便像处理grails加载的其他服务一样对待?

TIA

2 个答案:

答案 0 :(得分:1)

对你的问题的简短回答是“不”。

在幕后,Grails服务由一些引用特定位置并期望某些属性的智能代码驱动。

查看源代码(特别是在ServicesGrailsPlugin.groovy周围)是一种很好的方法,可以看到它们如何连接在一起的“神奇”。

您是否有理由不想使用真实的Grails服务来解决您的问题?如果您期望像grailsApplication这样的东西,似乎这种使用对于Grails来说非常具体,并且可以很好地移植到“真正的”Grails服务。

祝你好运!

答案 1 :(得分:1)

所以我已经完成了这个问题。这是一个时间问题。尚未初始化服务的地方。

基本上,当您使用resources.groovy进行服务连接时,您可能会冒使用可能初始化自身的服务的风险,例如: afterPropertiesSet方法或静态初始化程序,它们使用尚未注入的grails服务(log,hibernate session,..)。

所以......我转向的是在BootStrap.groovy文件中创建自己的BeanBuilder。

        BeanBuilder builder = new BeanBuilder(grailsApplication.parentContext)
    def bb = builder.beans {
        LoginListener(com.foo.LoginListener) {
            springSecurityService = ref("springSecurityService")
            userService = ref("userService")
        }
    }
    bb.registerBeans(grailsApplication.mainContext)