Java 每当创建对象时执行方法
我想知道无论何时创建对象,如何在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
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无法初始化的原因