Spring基礎-4-AOP註解

1,註解

1.1,通知類型

  • @Before – 前置通知
  • @AfterReturing – 後置通知
  • @Around – 環繞通知(目標對象方法默認不執行的,需要手動執行)
  • @After – 最終通知
  • @AfterThrowing – 異常拋出通知

1.2,配置通用的切入點

使用@Pointcut定義通用的切入點

@Aspect
public class MyAspectAnno {
    @Before(value="MyAspectAnno.fn()")
    public void log(){
        System.out.println("記錄日誌...");
    }
    @Pointcut(value="execution(public void com.itheima.demo1.CustomerDaoImpl.save())")
    public void fn(){}
}

2,註解方式完成AOP的開發

2.1,導入依賴和約束

2.2,創建包結構,編寫具體的接口和實現類

  • package:com.itheima.demo2
  • Interface:CustomerDao
  • Impl:CustomerDaoImpl

2.3, 目標類配置到Spring中

<bean id="customerDao" class="com.itheima.demo3.CustomerDaoImpl"/>

2.4,定義切面類

@Aspect
public class MyAspectAnno {
    @Before("MyAspectAnno.pointcut1()")
    public void before(){
        System.out.println("前置通知===========");
    }

    @Pointcut("execution(* cn.itcast.spring.demo4.ProductDao.save(..))")
    private void pointcut1(){}

        }

2.5,開啓aop註解的自動代理

<aop:aspectj-autoproxy/>

2.6,在配置文件中完成aop的配置

 <bean id="myAspectAnno" class="cn.itcast.spring.demo4.MyAspectAnno"></bean> 

2.7,其他註解

public class MyAspectAnno {

    @Before("MyAspectAnno.pointcut1()")
    public void before(){
        System.out.println("前置通知===========");
    }

    @AfterReturning("MyAspectAnno.pointcut2()")
    public void afterReturning(){
        System.out.println("後置通知===========");
    }

    @Around("MyAspectAnno.pointcut3()")
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable{
        System.out.println("環繞前通知==========");
        Object obj = joinPoint.proceed();
        System.out.println("環繞後通知==========");
        return obj;
    }

    @AfterThrowing("MyAspectAnno.pointcut4()")
    public void afterThrowing(){
        System.out.println("異常拋出通知========");
    }

    @After("MyAspectAnno.pointcut4()")
    public void after(){
        System.out.println("最終通知==========");
    }

    @Pointcut("execution(* cn.itcast.spring.demo4.ProductDao.save(..))")
    private void pointcut1(){}
    @Pointcut("execution(* cn.itcast.spring.demo4.ProductDao.update(..))")
    private void pointcut2(){}
    @Pointcut("execution(* cn.itcast.spring.demo4.ProductDao.delete(..))")
    private void pointcut3(){}
    @Pointcut("execution(* cn.itcast.spring.demo4.ProductDao.find(..))")
    private void pointcut4(){}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章