lzh
级别: 新手上路
只看楼主 | | | 0 发表于:2010-12-06 14:30

0 spring aop 控制业务流程是否可取?

假定有业务逻辑doSomeThing()需要判断用户是否有权限,传统的写法是在doSomeThing()中进行判断.现在aop来了,是否可以利用aop来进行统一的权限判断来控制业务流程的走向?
aop似乎并不影响目标对象的执行.想中断目标方法,只有抛异常和System.out().据说环绕通知可能可以,但我没研究.我这里就针对前通知来举例.
当aop程序判断用户没有权限时,应该可以阻断目标方法的执行,但似乎没有这个功能.我想了一个方法,成功执行,但不知道是否可取.
----------------------------------
/*

在下述代码中我增加了一个布尔值bContinue=true
*/
public class UserDAOIMP extends HibernateDaoSupport implements IUserDAO {
    private String sFlag;
    public boolean bContinue=true;
    @Override
    public String createUser(User user) {

        String hql = "from User u where u.domain='" + user.getDomain() + "' and u.username=?";

        
        if (bContinue){
        if (this.getHibernateTemplate().find(hql, user.getUsername()).isEmpty()) {
            
            this.getHibernateTemplate().save(user);
            System.out.println("没有找到记录" + user.getUsername() + ",已插入");
        } else {
            System.out.println("找到记录" + user.getUsername() + ",返回");
            sFlag = "error.loginfalse";
        }
        }else{
            sFlag = "error.notdo";
        }
            
        return sFlag;
    }
}

------------------------------------------------------------------
/*
假定有方法check()判别用户权根,返回布尔值
*/
public class CheckProcess {

    public void doBefore(JoinPoint jp) throws CloneNotSupportedException{
        System.out.println("....之前检查");
        if (jp.getTarget().getClass().getName().toString().equals("sys.dao.imp.UserDAOIMP")){
            UserDAOIMP userDAOIMP=(UserDAOIMP) jp.getTarget();
            if (!check()){
            userDAOIMP.bContinue=false;
            }
        }
}

-----------------------------------------------
通过上述手段强制性在目标方法执行之前对目标对像的一个属性值进行了修改,这样能达到控制业务流程的效果.
不知道这种方法是否可取?如果可取,刚需要在每个需要控制的目标中均需定义这样一个布尔值,且根据这个值来控制业务逻辑走向.
请高手指教!
----------------------------
www.lerx.com