这是非常基本的,但我无法弄清楚为什么它会一直重置创建日期。我在对象上使用了一个简单的过期缓存。如果它已过期,那么我将创建一个新对象。如果不是,那么只需使用存在的那个。但是,每次我去检查对象的创建日期时,它都是当前日期。
public class MyObjectImpl implements MyObjectInterface {
private static final long serialVersionUID = -3542728718515350246L; // auto generated from Eclipse...
public MyObjectImpl() {
this.creationDate = new Date().getTime();
}
public boolean hasExpired(BigInteger millesecondsToExpiration) {
if (millesecondsToExpiration == null) {
millesecondsToExpiration = new BigInteger("2592000000"); // 30 Days
}
if (getCreationDate() + millesecondsToExpiration.longValue() < new Date().getTime()) {
return true;
} else {
return false;
}
}
private Long creationDate;
public Long getCreationDate() {
return this.creationDate;
}
}
以下是我的称呼方式:
MyObjectInterface myObject = (MyObjectInterface)session.getAttribute("MY_OBJECT");
if (myObject == null || (myObject != null && myObject.hasExpired(null))) {
session.setAttribute("MY_OBJECT", new myObjectImpl());
}
答案 0 :(得分:3)
hasExpired
为年轻对象返回true
,这是错误的方法:
if (getCreationDate() + millesecondsToExpiration.longValue() < new Date().getTime()) {
return true;
} else {
return false;
}
所以每次都要重新创建对象。
答案 1 :(得分:0)
我认为最简单的答案是你的构造函数被调用了,你不认为它是。您是否尝试过登录构造函数?