1.  前置通知

  @Component

  @Aspect

  public class MyAdvice

  {

    @Pointcut("excution(void com.feiyan.BookDao.update())")

    private void pt()

    {

    }

    @Before("pt()")

    public void insert()

    {

    }

  }

2.  后置通知

  @Component

  @Aspect

  public class MyAdvice

  {

    @Pointcut("excution(void com.feiyan.BookDao.update())")

    private void pt()

    {

    }

    @After("pt()")

    public void insert()

    {

    }

  }

3.  环绕通知  注:需要在插入的方法里调用原方法的执行,并且要抛出异常,还需要在环绕通知方法里添加返回值

  @Component

  @Aspect

  public class MyAdvice

  {

    @Pointcut("excution(void com.feiyan.BookDao.update())")

    private void pt()

    {

    }

    @Around("pt()")

    public Object insert(ProceedingJoinPoint pjp) throws Throwable

    {

      System.println("111111");

      Objcet ret = pjp.proceed();

      System.println("22222");

      return ret;

    }

  }

4.  返回后通知  注:和后置通知的区别,后置通知一定会执行,此通知必须是原方法完整执行完后才会执行

  @Component

  @Aspect

  public class MyAdvice

  {

    @Pointcut("excution(void com.feiyan.BookDao.update())")

    private void pt()

    {

    }

    @AfterReturning("pt()")

    public void insert()

    {

    }

  }

5.  抛出异常后通知

  @Component

  @Aspect

  public class MyAdvice

  {

    @Pointcut("excution(void com.feiyan.BookDao.update())")

    private void pt()

    {

    }

    @AfterThrowing("pt()")

    public void insert()

    {

    }

  }