为什么我的aop  after总是在该方法之前执行。而不是在后面。?@Aspect
public class AdvAop{
//after
@After("execution(*  com.test.service.adv.impl.AdvServiceImpl.apply(..))")
public void advaop(JoinPoint joinpoint){

 Object[] args=joinpoint.getArgs();
 
System.out.println(args[0]);

System.out.println("***************************");
}
 }调用的是一个插入数据的一个service  该service调用了dao的方法
而hibernate 的sql 打印总是出现在********打印的后面。
也就是先执行了aop 而后执行的 service而不是先出现hibernate的sql 而在出现aop的打印********是我after调用错了还是我配置上的错误?
还有after和afterrunning有什么区别。spring用自动搜索aspectj求解答。

解决方案 »

  1.   

    你试试@AfterReturning吧,如果不行的话那就没办法了。
    after是方法执行后,而afterreturning就是在return的时候执行,从先后来说after在afterreturning之前。
      

  2.   

    afterrunning 也不行啊、
    总是先打印 后执行hql。
    我是想把网页静态化了、程序初始化时候静态一次、有增删改在执行静态化一次。可是我这一修改后先执行的打印*号 后执行hql 信息总是不对的。各位有好的解决办法吗
      

  3.   

    执行顺序应该是这样的啊:
    before advice  
    around  before
      
    service  around after-returning  
    after-returning   
    after   
    ---
    另外我改到了dao层了也不行。总是先执行打印后执行hql
    @After("execution(*  com.test.dao.adv.impl.AdvDAOImpl.apply(..))")