Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何自动设置使用spring aop创建的日期_Java_Spring_Hibernate_Spring Aop - Fatal编程技术网

Java 如何自动设置使用spring aop创建的日期

Java 如何自动设置使用spring aop创建的日期,java,spring,hibernate,spring-aop,Java,Spring,Hibernate,Spring Aop,我一直在用java+maven+spring+hibernate进行一个项目,我想在调用saveorupdate之前自动将当前日期分配给POJO。我不介意为所有类创建的所有日期创建newdate(),但它们已经足够了。 我刚刚发现spring aop擅长这些事情。 在google上呆了几分钟后,我找到了一个很好的方法。但到目前为止,我不知道如何准确地为POJO分配新的日期,POJO是我介绍界面的实现者类。我真的不知道如何让它变得有意义。因此,根据我的理解,我会这样做: //DateSetter.

我一直在用java+maven+spring+hibernate进行一个项目,我想在调用saveorupdate之前自动将当前日期分配给POJO。我不介意为所有类创建的所有日期创建
newdate()
,但它们已经足够了。 我刚刚发现spring aop擅长这些事情。
在google上呆了几分钟后,我找到了一个很好的方法。但到目前为止,我不知道如何准确地为POJO分配新的日期,POJO是我介绍界面的实现者类。我真的不知道如何让它变得有意义。因此,根据我的理解,我会这样做:

//DateSetter.java
package org.personal.myproject.model;

import java.util.Date;
//this is how i'm getting the current date
public interface DateSetter {

   public Date getCurrentDate();

}


//DateCreatedDateSetterImpl.java
package org.personal.myproject.model;

import java.util.Date;
// the implementation
public class DateCreatedDateSetterImpl implements DateSetter {

  public Date getCurrentDate() {
    return new Date();
  }

}

//DateIntroduction.java
package org.personal.myproject.model;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.DeclareParents;

@Aspect
public class DateIntroduction {
    //making all the model implementors of the DateSetter interface
    @DeclareParents(value="org.personal.myproject.model.*",
    defaultImpl=DateCreatedDateSetterImpll.class)
    public DateSetter dateSetter;

    /**here is to add my "before trigger" for every calling of every method.
       if you can see i have the daos in 2 packages, i don't know whether is wrong or         not.i'm actually using the generic Dao so should i use that interface instead?
    **/
    @Before("execution * org.personal.myproject.dao.hibernate.*.(..) || *    org.personal.myproject.dao.hibernate.*.*.(..)" + "&& this(dateSetter)")
    public void injectLastModifiedDate(DateSetter dateSetter){
      /**so here i'm expecting to inject the new date but apparently i'm missing something**/
    }
}

有人能告诉我我做错了什么吗?或者这是实现我想要做的事情的错误方法。感谢阅读

如果您使用Hibernate,您可以在将属性持久化到数据库之前使用实体侦听器设置属性

您只需要一个预持久化侦听器,将创建日期设置为
newdate()


这是最新版本。

谢谢阅读!!但是如果它是最后一次修改的,不能在数据库中设置该怎么办?好的,使用该方法,我将不得不对所有实体执行相同的操作。当所有内容都已创建且其数量显著时,这不是真正有用的。无论如何,感谢上次修改日期,概念是相同的。您只需指定一个预更新侦听器,而不是预持久化侦听器。谢谢您的帮助。因此,对于例如30个POJO,我必须为它们中的每一个指定一个预更新侦听器?@black sensei:不,让它们都扩展一个基类,如BaseEntity,并实现该类的功能。