grails服务层次结构

grails服务层次结构,grails,service,Grails,Service,假设我有10个grails服务。这些服务中的每一个都将调用REST服务。因此,我想封装REST代码,以便10个服务可以轻松地恢复它 在考虑备选方案时,我可以: 1) 使用REST相关代码创建另一个服务或bean,并将其注入10个服务中的每一个。 2) 创建一个包含REST代码的超类服务,并让所有10个grails服务扩展这个类 我试图使用选项2,但在向超类中注入依赖项时遇到了问题 例如: class SuperService { def aString } class ExampleS

假设我有10个grails服务。这些服务中的每一个都将调用REST服务。因此,我想封装REST代码,以便10个服务可以轻松地恢复它

在考虑备选方案时,我可以:

1) 使用REST相关代码创建另一个服务或bean,并将其注入10个服务中的每一个。
2) 创建一个包含REST代码的超类服务,并让所有10个grails服务扩展这个类

我试图使用选项2,但在向超类中注入依赖项时遇到了问题

例如:

class SuperService {
   def aString 
}

class ExampleService extends SuperService {
}
resources.groovy:

beans = {
    superService(SuperService) {
        aString = "something"
    }
    exampleService(ExampleService) {
    }
}
beans = {
    superService(SuperService) {
    }
    exampleService(ExampleService) {
        aString = "something"
    }
}
当我在运行集成测试的时候在调试器中运行它时,我看到aString的值为null。显然,这对我来说是个问题

正如您所料,使用以下资源运行相同的代码。groovy:

beans = {
    superService(SuperService) {
        aString = "something"
    }
    exampleService(ExampleService) {
    }
}
beans = {
    superService(SuperService) {
    }
    exampleService(ExampleService) {
        aString = "something"
    }
}
和aString=“某物”

所以,我更喜欢选项2,因为它将减少配置布线,但我认为这将是不可行的方法。换句话说,如果我必须在每个子类中设置aString,则没有任何价值

想法

我错过什么了吗

我也愿意接受其他选择

提前感谢,,
Todd

就干燥而言,你对选项2的想法是正确的,但实际上这只是一条线。如果superService对象的唯一共同点是服务,而没有其他方法,那么您实际上没有节省任何工作。如果说有什么区别的话,仅仅为依赖项注入声明一个超类会使事情更加隐藏,并且可能更难维护


这听起来像是您提议将REST方法放在超级服务中,所以不确定您为什么要关心将依赖项注入到超级服务中——您希望那里的方法执行REST交互,并且子类能够调用这些交互。或者你是在尝试选项1和选项2的组合?

你对选项2在干燥方面的想法是正确的,但实际上这只是一条线。如果superService对象的唯一共同点是服务,而没有其他方法,那么您实际上没有节省任何工作。如果说有什么区别的话,仅仅为依赖项注入声明一个超类会使事情更加隐藏,并且可能更难维护


这听起来像是您提议将REST方法放在超级服务中,所以不确定您为什么要关心将依赖项注入到超级服务中——您希望那里的方法执行REST交互,并且子类能够调用这些交互。或者您正在尝试选项1和选项2的组合?

为什么您认为选项2将更少配置布线?为什么您认为选项2将更少配置布线?在超级服务中,我需要访问springSecurityService或SpringSecurity插件提供的一个util或holder对象。此超级用户需要知道谁已登录,然后才能进行其余呼叫。星期五,我无法得到这个超级服务来检索任何东西。。。使用安全性时始终使用NPE。我认为我的问题在于依赖注入。今天早上,以下代码在超类中运行:def ctx=AH.application.mainContext SpringSecurityService SpringSecurityService=ctx.SpringSecurityService def loggedInUser=SpringSecurityService.getPrincipal()。我仍然感到惊讶的是,注射没有进入超级服务。您正在使用Grails2.0.RC1吗?或1.3.7?在超级服务中,我需要访问springSecurityService或SpringSecurity插件提供的一个util或holder对象。此超级用户需要知道谁已登录,然后才能进行其余呼叫。星期五,我无法得到这个超级服务来检索任何东西。。。使用安全性时始终使用NPE。我认为我的问题在于依赖注入。今天早上,以下代码在超类中运行:def ctx=AH.application.mainContext SpringSecurityService SpringSecurityService=ctx.SpringSecurityService def loggedInUser=SpringSecurityService.getPrincipal()。我仍然感到惊讶的是,注射没有进入超级服务。您正在使用Grails2.0.RC1吗?还是1.3.7?