Spring基於註解的aop配置

海浪星空發表於2020-12-14

Spring基於註解的aop配置

1.配置xml
在這裡插入圖片描述

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd
         http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">
        </beans>

完善xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd
         http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">

    <!--配置Spring容器建立時候要掃描的包-->
    <context:component-scan base-package="com.itheima"></context:component-scan>
    <!--配置Spring開啟註解aop的支援-->
    <aop:aspectj-autoproxy></aop:aspectj-autoproxy>

2.使用註解將AccountService和Logger物件的建立交給Spring 容器,同時用@Aspect註解表示當前是個切面類(我自己的說法:通俗的說就是通知類)
在這裡插入圖片描述
在這裡插入圖片描述
3.使用@Before、@AfterReturning、@AfterThrowing、@After、@Around註解表示當前方法是前置通知、後置通知、異常通知、最終通知還是環繞通知


/*
* 用於記錄日誌的工具類,提供了公共程式碼
* 或者說可以理解為通知類。切入點和通知類結合成為切面*/
@Component("logger")
@Aspect//表示當前類是一個切面類
public class Logger {

    /*
    * 用於列印日誌,計劃在切入點方法執行前執行。切入點方法就是業務層方法,也可以稱為被增強的方法*/
    @Before("execution(* com.itheima.service.Impl.*.*(..))")
    public void printLog(){
        System.out.println("Logger類中的方法開始記錄日誌");
    }
    @AfterReturning("execution(* com.itheima.service.Impl.*.*(..))")
    public void afterReturning(){
        System.out.println("記錄完畢");
    }
    @AfterThrowing("execution(* com.itheima.service.Impl.*.*(..))")
    public void throsAdvice(){
        System.out.println("有異常");
    }
    @After("execution(* com.itheima.service.Impl.*.*(..))")
    public void after(){
        System.out.println("finally");
    }
}

使用註解也可以配置切入點表示式
在這裡插入圖片描述

執行結果:
在這裡插入圖片描述

如果想使用純註解的AOP可是使用@EnableAspectJAutoProxy
在這裡插入圖片描述

相關文章