2012-04-12 60 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

相關問題