日期:2014-05-17  浏览次数:20635 次

使用aop拦截方法,里面的输出顺序每次不同?

@Before("execution(* x.x.x.x.*.save(..))")

    public void berforSaveInterrput(JoinPoint joinPoint) {

        Object[] args = joinPoint.getArgs();

        UserinfoEntity user = (UserinfoEntity) args[0];

        if(user.getPwd().equals("1232")) {

            System.err.println("请不要使用简单密码");

        }

        System.out.println("添加新用户'"+user.getLoginid()+"'");

    }



代码如上,图中是连续执行5次的输出结果,为什么有时候输出信息的顺序不是按代码的执行顺序来的?

------解决方案--------------------
输出的sql语句是不固定的。你的save方法在哪里的,通知
------解决方案--------------------
建议在每一行前面都加上用户ID,用以区别每一行log的输出源。
------解决方案--------------------
引用:
引用:建议在每一行前面都加上用户ID,用以区别每一行log的输出源。

5条都是一样的数据,点了5次保存按钮来显示执行顺序不对的问题,而且保存之前拦截的还不知道用户的id是什么


这样的情况怎么看都想是某些并发Request同时向一个log文件里面输出造成的结果。前后顺序不对也是假象。
从我用aop的经验来看,单纯的代码前后执行颠倒是不可能的。