2012-04-12 59 views
0

我想知道如何在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()方法创建时。

+0

o真的,我认为它是一样的:S – aki 2012-04-12 20:15:15

回答

1

当然,您会意识到这个类将Java Bean标准作为代码进行分解。

该标准将有望看到传递给setDateCreated()方法Date对象:

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

你可以自由地做你的方式,一旦你添加一个void返回类型,但不感到震惊如果其他代码期望您符合标准抱怨。

+0

谁说了有关JavaBeans的任何原因? – 2012-04-12 20:05:11

+0

我做到了。只是指出它违反了自Java 1.0以来的标准。您了解Java Bean,POJO与EJB不同,对吧? – duffymo 2012-04-12 20:06:43

+0

它解决了我的问题。我在我的构造函数setCreated(new Date())中添加了setter方法的调用;它真的有用。谢谢! – aki 2012-04-12 20:33:01

9

只需拨打setDateCreated在对象的构造函数:

public Person(){ 
    setDateCreated(); 
} 

你也能做到这一点直接在构造函数中,如果你不希望它在以后修改信息:

public Person(){ 
    this.dateCreated = new Date(); 
} 
+0

谢谢,这就是我所做的,但是,一些如何休眠不能得到这个allong。我的应用程序失败,带有巨大的堆栈跟踪说...调用init方法失败;嵌套的异常是org.hibernate.HibernateException:无法实例化默认的tuplizer [org.hibernate.tuple.entity.PojoEntityTuplizer] ...等等 – aki 2012-04-12 20:09:26

+0

Hibernate取决于您的对象遵循Java Bean POJO约定吗?啊,我是这么认为的。请参阅下面的答案。 – duffymo 2012-04-12 20:17:18

2

使用构造函数:

public Person(){ 
    setDateCreated(); 
} 

public class Person(){应该public class Person{

+0

true :)但它不是初始化hibernate无法初始化 – aki 2012-04-12 20:40:01

-1

我会使用某种面向方面的方法 - 这种方式可以避免在类中存在代码。检查方面j或春季的面向方面编程。

+0

没必要。而不改变字节码的AOP方法通常意味着代理一个接口。你打算如何用ctor来做到这一点?构造函数要简单得多。 AOP是在这种情况下打开核桃的锤子。 – duffymo 2012-04-12 20:16:31

+0

你将如何去登录对象创建?将该代码传播给每个班级?如果aop没有选项 - 好 - 如果它已经在(春天等),为什么不使用它? – hburde 2012-04-12 20:46:49

+0

我不会记录每个对象的创建。你做?真?另外,当你用构造函数调用“new”时,它不在Spring bean工厂的控制之下。 – duffymo 2012-04-12 21:56:39