首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >更改grails中插入的服务的名称

更改grails中插入的服务的名称
EN

Stack Overflow用户
提问于 2012-02-10 02:59:05
回答 4查看 2.6K关注 0票数 4

似乎找不到关于这个的信息,如果你有一些,请告诉我正确的帖子/帖子/链接!

我有一个服务,比方说它叫'SomeServiceWithAReallyLongNameICannotChange'.当然,使用服务的正常方式是允许grails使用无类型或类型化的表示法注入它们:

代码语言:javascript
运行
复制
class SomeClass{
    //...
    def someServiceWithAReallyLongNameICannotChange
    //...
}

-或者--

代码语言:javascript
运行
复制
class SomeClass{
    //...
    SomeServiceWithAReallyLongNameICannotChange someServiceWithAReallyLongNameICannotChange
    //...
}

我想要做的是将服务重命名为更短的名称,但仅在我使用它的地方,因为我不能更改实际服务的名称。我试着像使用导入一样使用'as‘表示法,也试着在类型化声明中更改名称,但这些方法似乎都不起作用。这个是可能的吗?

我尝试了这样的东西:

代码语言:javascript
运行
复制
class SomeClass{
    //...
    def someServiceWithAReallyLongNameICannotChange as SS
    //and I tried
    def SomeServiceWithAReallyLongNameICannotChange SS
    //no joy
    //...
}

谢谢你的帮忙!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-02-10 12:11:40

解决方案是按类型使用自动配线。默认情况下,grails按名称使用自动导航器,因此您必须使用与bean相同的名称来声明服务。

下面是一个例子

代码语言:javascript
运行
复制
class FooController {

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

}

  1. 您必须定义一个布尔变量byName并将其设置为
  2. 您不能使用def,而是必须使用服务的实际类型声明服务
  3. 它将为整个控制器启用按类型自动布线,因此所有其他依赖项也将通过类型

自动布线。

这是here的解释

更新:甚至可以将自动连接注释与限定符一起使用。

示例:

代码语言:javascript
运行
复制
class MyController {

  @Autowired
  @Qualifier("myServiceWithDifferntName")
  def someService

}
票数 6
EN

Stack Overflow用户

发布于 2012-02-10 04:52:35

您应该能够通过resources.groovy创建新的bean

代码语言:javascript
运行
复制
beans = {
    ss(SomeServiceWithAReallyLongNameICannotChange)
}

然后您可以正常地注入它:

代码语言:javascript
运行
复制
class SomeClass {
    //...
    def ss
    //...
}
票数 3
EN

Stack Overflow用户

发布于 2012-02-10 14:45:46

另一种选择是,如果您不想通过整个控制器按类型使用自动连接,也不想出于某种原因添加自定义bean,则可以在需要服务的控制器中添加一个简单的方法,如下所示:

代码语言:javascript
运行
复制
def someServiceWithAReallyLongNameICannotChange
def getSS() { someServiceWithAReallyLongNameICannotChange }

然后,您可以在该控制器中的任何位置使用ss.someMethod()引用该服务。

但是,这仍然需要您为使用此服务的每个控制器添加一段代码,否则您将得到不一致的服务命名。

(就我个人而言,我认为doelleri的方法是最好的,因为它允许您在命名时保持一致,而无需修改单个类。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9217031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档