域类中注入grails服务的问题

域类中注入grails服务的问题,grails,service,dependency-injection,Grails,Service,Dependency Injection,我正在尝试将“GraauditService”注入grails“User”域类 我正在使用Grails1.3.7 我在控制器中尝试了直接注入法 导入com.gra.audit.GraauditService class User { def graauditService // or even GraauditService graauditService with graauditService as transient ....... 上述方法不起作用graauditService始终显示

我正在尝试将“GraauditService”注入grails“User”域类
我正在使用Grails1.3.7 我在控制器中尝试了直接注入法
导入com.gra.audit.GraauditService

class User {
def graauditService // or even GraauditService graauditService with graauditService as transient
.......
上述方法不起作用
graauditService
始终显示为空

我还尝试通过
ApplicationHolder
进行注入,如图所示

但看起来ApplicationHolder现在已被弃用


如何在域类中使用服务?

尝试使用transient关键字注入服务:

class User {
   transient graauditService 
}

以下是我的作品

class User {

    def springSecurityService
    static transients = ['springSecurityService']
}

对于Grails1.3.7,解决方案是通过
ApplicationHolder
注入它,如Burt Beckwith所示


上述解决方案可能适用于Grails 2.0,但不适用于1.3.7或更早版本。

它仍然显示为null,当我使用ApplicationHolder方法时,它显示为非null,但它没有在服务中调用该方法?该服务是否插入到控制器中?此服务的实际类名是什么?SLA名称是GraauditService,控制器GraauditService GraauditService中的以下声明工作正常。您不应该这样做,传统的web体系结构类似于域作为内核的位置。长话短说:域类处理“业务域”逻辑,有时面向域的服务充当门面,提供涉及域的常见操作。这就是Grails不会在域类上注入服务的原因,从那里调用它们是不合适的。无论您试图做什么,它可能更适合在服务层中完成。您能详细介绍一下您需要实现的功能吗?我正在尝试为这个域类的各种事件添加auditlog条目,如保存、删除、加载。。etc@EstebanGrails不会将服务注入grailsdoman类,这是完全不正确的。在我的应用程序中,我成功地将
springSecurityService
注入到我的域类中,以便在保存用户密码之前对其进行编码。我不同意你的断言,即将服务注入域类始终是一种糟糕的做法。我相信你的论点不是很有力,你为什么要这样做?我不支持贫乏的域类,但将服务注入域类会产生依赖循环,这通常不是一个好的体系结构决策@pri_dev:下面是如何在Grails中优雅地实现基于事件的审计拦截器的方法:。在我看来,普通密码无论如何都不应该由服务器处理。为什么不在客户机中或在密码到达服务器时对其进行编码呢?啊,我在看Grails2.0。忘了他们从1.3.7中更改了它。当我从ApplicationHolder获得服务时,它对我有效。现在就好了。。