2012-04-12 5 views
0

Ich würde gerne wissen, wie Methode, in Java, jedes Mal, wenn Objekt erstellt wird.excete Methode immer wenn Objekt erstellt wird

zum Beispiel:

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(); 
} 

Ich würde wirklich wie für meinen setDateCreated() -Methode für jedes Objekt ausgeführt werden, wenn es erstellt wird.

+0

o wirklich, ich dachte, es war das gleiche: S – aki

Antwort

1

Sie erkennen natürlich, dass diese Klasse den Java Bean-Standard wie codiert durchbricht.

Der Standard wird erwartet ein Date-Objekt der setDateCreated() Methode übergeben, um zu sehen:

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

Du bist frei, es auf deine Weise zu tun, wenn Sie einen Rückgabetyp void hinzufügen, aber nicht schockiert wenn ein anderer Code, der von Ihnen erwartet, dass er dem Standard entspricht, sich beschwert.

+0

wer sagte etwas über JavaBeans? –

+0

tat ich. Ich habe nur darauf hingewiesen, dass es den seit Java 1.0 geltenden Standard durchbricht. Sie verstehen, dass Java Beans, POJOs, sich von EJBs unterscheiden, oder? – duffymo

+0

es löste mein Problem. Ich habe einen Aufruf für die Setter-Methode in meinen Konstruktoren hinzugefügt. SetCreated (new Date()); und es funktioniert wirklich. Vielen Dank! – aki

9

Rufen Sie einfach setDateCreated in Ihrem Objektkonstruktor:

public Person(){ 
    setDateCreated(); 
} 

Sie es auch im Konstruktor direkt tun können, wenn Sie es später geändert werden nicht wollen:

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

danke, das ist, was ich tue, aber einige, wie Winterschlaf nicht mit all dies bekommen kann. Meine Anwendung schlägt mit enormer Stapelverfolgung fehl, die sagt ... Aufruf der Init-Methode fehlgeschlagen; verschachtelte Ausnahme ist org.hibernate.HibernateException: Kann Standard-Tuplizer nicht instanziieren [org.hibernate.tuple.entity.PojoEntityTuplizer] ... UND SO ON – aki

+0

Ist Hibernate abhängig von Ihrem Objekt nach Java Bean POJO Konventionen? Ah, das dachte ich mir. Siehe meine Antwort unten. – duffymo

2

Verwendung Konstrukteurs:

public Person(){ 
    setDateCreated(); 
} 

auch, sollte public class Person(){sein

+0

true :) aber es ist nicht der Grund, warum Hibernate nicht initialisiert – aki

-1

Ich würde eine Art Aspekt orientierten Ansatz verwenden - auf diese Weise vermeiden Sie den Code in Ihrer Klasse. Überprüfen Sie den Aspekt j oder die Feder für die aspektorientierte Programmierung.

+0

Nicht erforderlich. Und AOP-Ansätze, die den Byte-Code nicht ändern, bedeuten normalerweise die Proxys einer Schnittstelle. Wie willst du das mit einem Ctor machen? Ein Konstruktor ist viel einfacher. AOP ist ein Hammer, der in diesem Fall eine Walnuss öffnet. – duffymo

+0

Wie würden Sie die Objekt-Erstellung anmelden? Verbreite diesen Code über jede Klasse? Wenn aop keine Option ist - ok - wenn es schon in (Frühling etc) ist warum nicht benutzen? – hburde

+0

Ich würde nicht jede Objekt-Erstellung protokollieren. Machst du? "Ja wirklich?" Abgesehen davon, in dem Moment, in dem Sie mit einem Konstruktor "neu" aufrufen, liegt es nicht unter der Kontrolle der Spring Bean-Fabrik. – duffymo

Verwandte Themen