在创建grails服务时,许多教程显示类似于:grails create-service myproject.DoStuff
,但似乎grails create-service myproject.doStuff
也可以正常工作,并且它们都创建一个名为“DoStuffService”的服务使用所有大写似乎工作正常,但似乎有很多地方用小写的第一个字母显示它。我提交了这个小写示例(第一个代码段和页面中间的def authorService
):http://grails.org/doc/2.1.0/guide/services.html
首选哪种方式?为什么?如果您在grails命令中使用小写创建服务,是否需要使用小写def doStuff
注入或def DoStuff
以任何方式工作?
答案 0 :(得分:4)
两者都有效,但我认为将名字小写更常见,因为从概念上讲,您正在使用grails create-service person
创建“人员服务”。但是Java和Groovy中的约定是大写的类名,而Grails中的约定是带有“Service”的后缀服务类名,因此这会导致类名为PersonService
。
bean名称与所有这些都是分开的。 Spring bean名称的约定是将第一个字母小写为变量,因此Grails会自动将PersonService注册为personService
bean,因此您应该使用def personService
。
def personService
的工作原理是Groovy编译器将这样的非范围字段转换为私有字段和公共getter和setter方法。如果getter或setter方法已经存在,它将不会取代你的。 Grails将其bean配置为按名称使用自动装配,因此Spring会看到setPersonService
方法并调用它将其值设置为personService
bean。