更改grails中注入的服务的名称

Qua*_*Bit 4 service grails

似乎无法找到关于此的信息,如果你有一些,请指向正确的主题/帖子/链接!

我有一个服务,让我们说它叫做'SomeServiceWithAReallyLongNameICannotChange'.当然,使用服务的正常方法是允许grails使用typless或typed表示法注入它们:

class SomeClass{
    //...
    def someServiceWithAReallyLongNameICannotChange
    //...
}
Run Code Online (Sandbox Code Playgroud)

- 要么 -

class SomeClass{
    //...
    SomeServiceWithAReallyLongNameICannotChange someServiceWithAReallyLongNameICannotChange
    //...
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是将服务重命名为更短的内容,但仅限于我正在使用它的地方,因为我无法更改实际服务的名称.我尝试使用'as'表示法,就像使用import一样,我尝试在类型化声明中更改名称,但这些东西似乎都不起作用.这可能吗?

我试过这样的事情:

class SomeClass{
    //...
    def someServiceWithAReallyLongNameICannotChange as SS
    //and I tried
    def SomeServiceWithAReallyLongNameICannotChange SS
    //no joy
    //...
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

Sud*_*r N 6

解决方案是按类型使用autowire.默认情况下,grails按名称使用autowire,因此您必须使用与bean相同的名称声明服务.

这是一个例子

class FooController {

  boolean byName = false  //set autowire by type
  SomeReallyLongService service

}
Run Code Online (Sandbox Code Playgroud)
  1. 您必须通过名称定义布尔变量并将其设置为false
  2. 您不能使用def,但在声明服务时必须使用实际的服务类型
  3. 它将为整个控制器按类型启用autowire,因此所有其他依赖项也将按类型自动装配

这里解释一下

更新:甚至可以使用Autowired注释和限定符.

例:

class MyController {

  @Autowired
  @Qualifier("myServiceWithDifferntName")
  def someService

}
Run Code Online (Sandbox Code Playgroud)