參考文章:@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,...