关于dao单例问题

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捕捉处理异常呢?搞得代码又难看,逻辑又不清!

有了异常机制还搞出个变量去记录是否出异常,多此一举~