Spring Anno AOP 基於註解的AOP)

2021-10-06 12:44:39 字數 2035 閱讀 4860

參考文章:@aspect註解:

<?xml version="1.0" encoding="utf-8"?>

package com.itheima.utils;

import org.aspectj.lang.proceedingjoinpoint;

import org.aspectj.lang.annotation.*;

import org.springframework.stereotype.component;

/** * 用於記錄日誌的工具類,它裡面提供了公共的**

*/@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框架會為我們提供該介面的實現類供我們使用。

** spring中的環繞通知:

* 它是spring框架為我們提供的一種可以在**中手動控制增強方法何時執行的方式。

*/@around("pt1()")

public object aroundpringlog(proceedingjoinpoint pjp)catch (throwable t)finally }}

package com.itheima.service.impl;

import com.itheima.service.iaccountservice;

import org.springframework.stereotype.service;

/** * 賬戶的業務層實現類

*/@service("accountservice")

public class accountserviceimpl implements iaccountservice

@override

public void updateaccount(int i)

@override

public int deleteaccount()

}

package com.itheima.test;

import com.itheima.service.iaccountservice;

/** * 測試aop的配置

出現異常了: 

AspectJ基於xml和基於註解

一 基於xml 執行的切入點中具體方法有返回值,則方法結束會立即執行後置通知,然後再執行環繞通知的放行之後的 2 連線點即所有可能的方法,切入點是正真被切的方法,連線點方法名 其中,只有環繞通知的切入點引數不一樣,是可以放行的切入點 3 異常通知是處理異常 切面類中的異常通知的方法引數列表中異常引數...

拓撲排序(基於dfs 基於佇列)

dfs函式的返回值表示是否成環,若存在有向環,則不存在拓撲排序。不包含有向環的有向圖稱為有向無環圖 dag 可以借助dfs完成拓撲排序,在訪問完乙個結點時把他加入當前拓撲序的首部。舉個栗子 比如乙個 1,2 1,3 2,3 的有向無環圖,就先搜尋1,再遞迴搜尋2,再搜尋3,3沒有出度了,於是放進拓撲...

基於insert update delete的注入

inset注入原理 所謂inset注入就是指我們前端註冊的資訊會被後台通過insert操作插入到資料庫裡邊去,若此時後台沒有做出相應的處理就會構成insert注入。insert注入方法 insert用法例如 insert into member username,pw,phonenum,email,...