我想在grails 3.3.2中创建一个方面,每次调用我的域类对象的save()
方法时都会执行该方面。
我该怎么做?
/ ************ /
编辑: @pavger
我尝试了以下代码,尽管调用了任何ProyectoService方法,我的Aspect从未运行
服务域类
import grails.gorm.services.Service
@Service(Proyecto)
interface ProyectoService {
Proyecto get(Serializable id)
List<Proyecto> list(Map args)
Long count()
void delete(Serializable id)
Proyecto save(Proyecto proyecto)
}
看点!
@Aspect
class MeAspect {
@PostConstruct
public void init() {
println "Inicializado"
}
@Pointcut("within(com.sample.ProyectoService.*())")
void isDomainClass() {}
@Around("isDomainClass()")
Object aroundSaveConnector(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
Object[] args = proceedingJoinPoint.getArgs()
println "Aspecto before"
Object object = proceedingJoinPoint.proceed(proceedingJoinPoint.getArgs())
println "Aspecto after"
return object
}
}
答案 0 :(得分:0)
您可以在Domain类上创建一个选项。 这是GORM的一个选项
事件和自动时间戳 GORM支持将事件注册为在发生某些事件(例如删除,插入和更新)时被触发的方法。以下是支持的事件列表:
beforeInsert - 在对象最初持久化到数据库之前执行。如果您返回false,则插入将被取消。
beforeUpdate - 在更新对象之前执行。如果您返回false,则更新将被取消。
beforeDelete - 在删除对象之前执行。如果您返回false,则删除将被取消。
beforeValidate - 在验证对象之前执行
afterInsert - 在对象持久保存到数据库后执行
afterUpdate - 在更新对象后执行
afterDelete - 删除对象后执行
onLoad - 从数据库加载对象时执行
http://gorm.grails.org/6.0.x/hibernate/manual/
class Person {
private static final Date NULL_DATE = new Date(0)
String firstName
String lastName
Date signupDate = NULL_DATE
def beforeInsert() {
if (signupDate == NULL_DATE) {
signupDate = new Date()
}
}
}
class Person {
def securityService
String firstName
String lastName
String lastUpdatedBy
static constraints = {
lastUpdatedBy nullable: true
}
def beforeUpdate() {
lastUpdatedBy = securityService.currentAuthenticatedUsername()
}
}