Spring基於註解AOP配置

2022-01-24 01:39:04 字數 1646 閱讀 4597

一、spring基於註解aop配置

1. 假設建立乙個accountservice需要增強(執行其中每乙個方法都會加乙個記錄日誌的方法),則再建立乙個日誌類實現記錄日誌方法;

//

將該類注入spring容器

@component("logger")

@aspect

//表示當前類是乙個切面類

public

class

logger

/*** 前置通知

*/@before("pt1()")

public

void

beforeprintlog()

/*** 後置通知

*/@afterreturning("pt1()")

public

void

afterreturningprintlog()

/*** 異常通知

*/@afterthrowing("pt1()")

public

void

afterthrowingprintlog()

/*** 最終通知

*/@after("pt1()")

public

void

afterprintlog()

/*** 環繞通知

*問題:

* 當我們配置環繞通知之後,切入點方法沒有執行,而是通知方法執行

*分析:

* 動態**中的環繞通知 有明確的切入點方法的呼叫,而我們的沒有

*解決:

* spring提供乙個介面:proceedingjoinpoint,該介面的proceed()方法相當於明確呼叫切入點方法

* 該介面可以作為環繞通知的方法引數,在程式執行時,spring框架中為我們提供介面的實現類供我們使用

* sprig的環繞通知

* 可以在**中手動控制增強方法何時執行的方式

*///

@around("pt1()")

public

object aroundprintlog(proceedingjoinpoint pjp)

catch

(throwable t)

finally

}}

@service("accountservice")

public

class accountserviceimpl implements

iaccountservice

public

void updateaccount(int

i)

public

intdeleteaccount()

}

2.配置開啟註解

<

context:component-scan

base-package

="com.li"

>

context:component-scan

>

<

aop:aspectj-autoproxy

>

aop:aspectj-autoproxy

>

spring使用註解配置AOP 基於Aspect

需要先了解使用配置檔案配置aop的方法 spring不會自動去尋找註解,必須要告訴那些包下的類中可能有助解,需要使用context命名空間,用來掃瞄註解。component public class demo 1 預設為類名首字母小寫,即demo,若想換,則可 component 自定義名稱 2 c...

Spring 基於註解的AOP

用於記錄日誌的工具類,它裡面提供了公共的 component logger aspect 表示當前類是乙個切面類 public class logger 前置通知 before pt1 public void beforeprintlog 後置通知 afterreturning pt1 public...

Spring5(12) 基於註解的AOP配置

service accountservice public class accountserviceimpl implements iaccountservice override public void updateaccount int i override public intdeleteac...