如何在Grails 3.3.2中为域类保存方法创建方面?

时间:2018-02-06 21:44:41

标签: spring grails aspectj aspect

我想在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
    }
}

1 个答案:

答案 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()
   }
}