当我们执行def someService
时会发生什么?服务代码是否链接到控制器代码?
答案 0 :(得分:1)
Grails使用spring IOC,你的控制器和服务作为spring bean进行管理,当你在一个控制器内部定义一个服务时,spring会在控制器内部注入服务,代码无论如何都不会被链接,只需参考服务即可组。虽然它不是一个非常昂贵的操作,但您不希望定义不用于保持代码清洁的服务依赖性
答案 1 :(得分:1)
我认为在幕后它与Spring @Autowired
注释的过程相同,所以你在启动时需要付出一点性能损失,但我认为这并不重要。
关于主题here还有另一个stackoverflow问题。
答案 2 :(得分:0)
服务代码是否与控制器代码相关联?
这没有意义。
实际上,grails中的服务默认为singleton。因此,如果您通过def serviceName
注入服务,它将不会创建新的服务对象,而是引用相同的旧服务对象。
所以它当然不贵。
但是如果在服务中有一个属性静态session="prototype"
或一些像这样的非单例。那么它很昂贵。