最近忙於面試換工作,不論是學習還是工作似乎都忽略了spring另外的乙個強大之處:aop;當被面試問道如何基於aop做出乙個單點登入的時候頓時有點傻眼。下來之後做了一番學習。本文以日誌管理為例,說明aop的強大之處。
首先,說明一下aop的強大應用。
可以簡單實現強大的功能:日誌記錄,效能統計,安全控制,事物處理,異常處理等。
aop是aspect oriented programming ,意識是面向切面變成,實際是gof設計模式的延續。
aspect:切面,在aop中可以採用@aspect註解來實現切面
joinpoint:連線點,在spring aop中乙個連線點代表乙個方法的執行。
advice:通知,在切面(aspect)的某個特定的連線點(joinpoint)上執行的動作。通知有幾種型別:
around:方法執行前後通知;
before:方法執行前通知;
after:方法執行後通知;
pointcut:定義乙個或一組方法,當是在這些方法時可以產生通知。
@aspectj風格的aop配置
spring aop配置有兩種風格:
xml風格 = 採用宣告形式實現spring aop
aspectj風格 = 採用註解形式實現spring aop
注:本文採用xml風格
好了,開始我們的code。
首先搭建spring的配置在一文中闡述。
mylog的**:
package controller.log;
import org.aspectj.lang.joinpoint;
public class mylog
system.out.println(joinpoint.getclass().getmethods());
system.out.println(joinpoint.gettarget());
system.out.println("被攔截方法呼叫之前呼叫此方法,輸出此語句");
} public void after(joinpoint joinpoint)
}
在執行service包裡面的所有類的所有方法的時候會進入mylog中。
注:處理的時候可能會報錯,是因為包重複原因是spring中的cglib-nodep-2.1.3.jar與hibernate中的cglib-2.2.jar相衝突!
我的解決方法是 刪除cglib即可
spring的AOP 基於XML實現AOP的過程
參考對應的 logaspect bean 或者 logaspect 類。logaspect類如下 package org.zttc.itat.spring.proxy import org.aspectj.lang.joinpoint import org.aspectj.lang.proceedi...
AOP基於註解實現
切面類 component 控制反轉 aspect 宣告切面類 public class forumadvisor after execution com.mitu.aspect.宣告後置增強 public void after around execution com.mitu.aspect.宣告...
基於註解的AOP
aop是oop的延續,是aspect oriented programming的縮寫,意思是面向切面程式設計。可以通過預編譯方式和執行期動態 實現在不修改源 的情況下給程式動態統一新增功能的一種技術。aop實際是gof設計模式的延續,設計模式孜孜不倦追求的是呼叫者和被呼叫者之間的解耦,aop可以說也...