【发布时间】:2012-03-13 22:59:17
【问题描述】:
我正在尝试将“GraauditService”注入 grails“用户”域类。
我正在使用 grails 1.3.7
我已经尝试过直接注入方法,就像在控制器中所做的那样
导入 com.gra.audit.GraauditService
class User {
def graauditService // or even GraauditService graauditService with graauditService as transient
.......
上述方法不起作用。 graauditService 总是显示为空
我也尝试通过ApplicationHolder注入如图here
但现在看来 ApplicationHolder 已被弃用
如何在域类中使用服务?
【问题讨论】:
-
你不应该这样做,传统的 Web 架构类似于 microkernel pattern,其中域是内核。长话短说:领域类处理“业务领域”逻辑,有时面向领域的服务充当外观,提供涉及领域的常见操作。这就是为什么 Grails 不会在域类上注入服务的原因,从那里调用它们是不行的。无论您尝试做什么,它可能更适合在服务层中完成。您能否详细说明您需要实现的目标?
-
我正在尝试为该域类的各种事件添加审计日志条目,例如保存、删除、加载..等
-
@Esteban Grails 不会将服务注入到 Grails 域类中是不正确的。在我的应用程序中,我成功地将
springSecurityService注入到我的域类中,这样我就可以在保存用户密码之前对其进行编码。我不同意您的说法,即将服务注入域类始终是一种不好的做法 -
我相信你的论点不是很强,你为什么要这么做?我不适合贫血的域类,但将服务注入域类会产生依赖循环,这通常不是一个好的架构决策。 @pri_dev:这是在 Grails 中优雅地实现基于事件的审计拦截器的方法:Inside Hibernate Events。在我看来,普通密码不应该由服务器处理。为什么不在客户端或一到达服务器就对密码进行编码?
标签: grails service dependency-injection