Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.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 每当创建对象时执行方法_Java - Fatal编程技术网

Java 每当创建对象时执行方法

Java 每当创建对象时执行方法,java,Java,我想知道无论何时创建对象,如何在java中执行方法 例如: public class Person { private String name; private int age; private Date dateCreated; public setName(String name){ ... } ... some other methods ... public setDateCreated(){ this

我想知道无论何时创建对象,如何在java中执行方法

例如:

public class Person {
    private String name;
    private int age;
    private Date dateCreated;

    public setName(String name){
    ...
    }
    ... some other methods ...

    public setDateCreated(){
         this.dateCreated = new Date();
}

我非常希望我的setDateCreated()方法在创建时对每个对象都执行。

只需在对象构造函数中调用
setDateCreated

 public Person(){
     setDateCreated();
 }
如果不希望以后修改,也可以直接在构造函数中执行:

 public Person(){
     this.dateCreated = new Date();
 }
使用构造函数:

public Person(){
  setDateCreated();
}

另外,
public-class-Person(){
应该是
public-class-Person{

您当然知道,这个类违反了编码的JavaBean标准

标准将期望看到一个日期对象传递给
setDateCreated()
方法:

public void setDateCreated(Date newDate) { 
    this.dateCreated = ((newDate == null) ? new Date() : new Date(newDate.getTime()));
}

一旦添加了一个void返回类型,您就可以按照自己的方式进行操作,但如果其他希望您遵守标准的代码抱怨,请不要感到震惊。

我会使用某种面向方面的方法-这样可以避免代码出现在类中。请查看aspect j或spring以了解面向方面的编程。

谁说过t JavaBeans?是的。我只是指出它打破了自Java 1.0以来的标准。您知道Java Beans POJO不同于EJB,对吧?它解决了我的问题。我在构造函数setCreate(new Date())中添加了对setter方法的调用;它真的很有效。谢谢!谢谢,这就是我所做的,但是hibernate的一些功能无法实现。我的应用程序失败了,堆栈跟踪显示…init方法调用失败;嵌套异常是org.hibernate.hibernateeException:无法实例化默认元组[org.hibernate.tuple.entity.PojoEntityTuplizer]…因此,根据您的对象是否遵循Java Bean POJO约定,是否需要休眠?啊,我也这么认为。请参见下面的答案。o真的,我认为是一样的:SDuffymo实际上指出,您在这里使用的是一个setter,它也需要符合标准。命名是编程中的一切,我将该方法命名为
setDateToToday()
将其设为私有,并从构造函数调用,如Talnocolas在回答中指出的(这应该是公认的答案)。无论如何,
setter
会希望您传入变量以实际将其设置为,如果您想要使用期望该约定的库,则它将不起作用。这不是必需的。不改变字节码的AOP方法通常意味着代理接口。您打算如何使用一个ctor来执行此操作?构造函数要简单得多。a在这种情况下,OP是一把打开胡桃木的锤子。你会如何记录对象创建?将代码传播到每个类上?如果aop没有选项-好的-如果它已经在(spring等)中,为什么不使用它?我不会记录每个对象创建。是吗?真的吗?此外,当你调用“new”时对于构造函数,它不在SpringBean工厂的控制之下。true:),但这不是hibernate无法初始化的原因