我想为域类编写beforeUpdate
事件的自定义侦听器:
我的项目中有很多域类。
我想创建自定义侦听器,并且在每个域类的beforeUpdate
事件中我想要执行一些逻辑。
答案 0 :(得分:2)
您可以在beforeInsert
中设置全局beforeUpdate
和BootStrap.groovy
,如:
import org.codehaus.groovy.grails.commons.GrailsDomainClass
class BootStrap {
def grailsApplication
def init = { servletContext ->
grailsApplication.domainClasses.each { GrailsDomainClass gc ->
gc.metaClass.beforeInsert = {
log.debug "beforeInsert"
//code here
}
gc.metaClass.beforeUpdate = {
log.debug "beforeUpdate"
//code here
}
}
}
def destroy = {}
}
如果您想为某些域类执行不同的操作,而对其他域类执行不同的操作
grailsApplication.domainClasses.each { GrailsDomainClass gc ->
if(gc.metaClass.javaClass.equals(User) || gc.metaClass.javaClass.equals(Role)){
gc.metaClass.beforeInsert = {
log.debug "beforeInsert"
//code here
}
gc.metaClass.beforeUpdate = {
log.debug "beforeUpdate"
//code here
}
} else ...
}
答案 1 :(得分:1)
扩展@ user1690588的答案,您还可以使用以下命令挑选您想要举办beforeInsert
个活动的域类:
grailsApplication.getDomainClass('com.myapp.MyDomain')
答案 2 :(得分:0)
您可以将服务注入域类并在beforeUpdate事件上调用服务方法。并对多个域类使用相同的服务方法。 域类:
class TestDomain {
transient testService
def beforeUpdate() {
testService.testMethod()
}
}
服务类:
class TestService {
def testMethod() {
// Custom logic goes here
}
}