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

CoKing 发布于 2013/02/16 15:14
阅读 234
收藏 1
@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次的输出结果,为什么有时候输出信息的顺序不是按代码的执行顺序来的?

加载中
0
JSON.org.cn
JSON.org.cn
你是一个线程在跑么?
CoKing
CoKing
回复 @JSON.org.cn : 就一次调用,5次是点了5次按钮来执行拦截
JSON.org.cn
JSON.org.cn
回复 @切糕 : 我意思是, 你有这个方法在几个线程同时跑的? 还是就一个main调了这个方法?
CoKing
CoKing
这里没用到线程的东西,而且方法里面的代码执行顺序跟线程也没关系吧
0
CoKing
CoKing
木有人啊,@高手 ,@大神在哪里?
0
CoKing
CoKing
同样的代码加断点单步调试的时候顺序正常
0
CoKing
CoKing
@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")) {
            log.info("请不要使用简单密码");
        }
        log.info("添加新用户'" + user.getLoginid() + "'");
    }

使用log4j来输出日志时,同样连续执行5次,执行顺序也正常。费解难道是System.out的原因么?求解啊

2013-02-17 08:58:52,235 x.x.x.aop.TestAop  - 请不要使用简单密码
2013-02-17 08:58:52,235 x.x.x.aop.TestAop  - 添加新用户'cmcm2'
Hibernate: insert into CO.USERINFO (DETAIL, EXTEND, LOGINID, PWD, ROLE, ID) values (?, ?, ?, ?, ?, ?)
2013-02-17 08:58:56,805 x.x.x.aop.TestAop  - 请不要使用简单密码
2013-02-17 08:58:56,805 x.x.x.aop.TestAop  - 添加新用户'cmcm2'
Hibernate: insert into CO.USERINFO (DETAIL, EXTEND, LOGINID, PWD, ROLE, ID) values (?, ?, ?, ?, ?, ?)
2013-02-17 09:00:07,761 x.x.x.aop.TestAop  - 请不要使用简单密码
2013-02-17 09:00:07,761 x.x.x.aop.TestAop  - 添加新用户'cmcm2'
Hibernate: insert into CO.USERINFO (DETAIL, EXTEND, LOGINID, PWD, ROLE, ID) values (?, ?, ?, ?, ?, ?)
2013-02-17 09:00:08,503 x.x.x.aop.TestAop  - 请不要使用简单密码
2013-02-17 09:00:08,503 x.x.x.aop.TestAop  - 添加新用户'cmcm2'
Hibernate: insert into CO.USERINFO (DETAIL, EXTEND, LOGINID, PWD, ROLE, ID) values (?, ?, ?, ?, ?, ?)
2013-02-17 09:00:09,108 x.x.x.aop.TestAop  - 请不要使用简单密码
2013-02-17 09:00:09,108 x.x.x.aop.TestAop  - 添加新用户'cmcm2'
Hibernate: insert into CO.USERINFO (DETAIL, EXTEND, LOGINID, PWD, ROLE, ID) values (?, ?, ?, ?, ?, ?)

0
CoKing
CoKing
问题找到了,是 System.out和System.err混用的原因,具体为什么再研究下
返回顶部
顶部