public class SpringHandler extends HibernateDaoSupport implements IHandler {
boolean flag = false;
public boolean saveObj(Object obj) {
try {
this.getHibernateTemplate().save(obj);
flag = true;
} catch (Exception e) {
// log.error(obj.getClass().getName()+"在spring-hibearnate刪除出现异常");
e.printStackTrace();
}
return flag;
}
public boolean deleteObj(Object obj) {
try {
this.getHibernateTemplate().delete(obj);
flag = true;
} catch (Exception e) {
// log.error(obj.getClass().getName()+"在spring-hibearnate刪除出现异常");
flag = false;
}
return flag;
}
}
由于DAO 是默认单例 所以这个SpringHandler 是有状态的,在这个类中好多用到flag的地方,所以这个DAO 是有问题的,对吧!
何必这样写呢?这样多简单:
[code="java"]
public boolean deleteObj(Object obj) {
try {
this.getHibernateTemplate().delete(obj);
return true;
} catch (Exception e) {
if (log.isErrorEnabled()) {
log.error("error when delete object from database");
}
return false;
}
}
[/code]
Dao没有默认是单例吧,最好把flag不要作为类变量
flag定义在每个方法中。
[quote]我把action托付给spring来管理,如果没有写scope那么默认spring是单例,但是为什么我测试的时候总是多例呢,我是这样测试的
@Controller
public abstract class BaseAction extends ActionSupport implements ServletRequestAware, ServletResponseAware{
protected int i=0;
public void testss() throws Exception {
System.out.println(i++);
}
}
每次都是0 [/quote]
这是action的抽象类,那具体的Action(子类)是什么样子的?
为什么要在dao捕捉处理异常呢?搞得代码又难看,逻辑又不清!
有了异常机制还搞出个变量去记录是否出异常,多此一举~