怎麼使用spring aop

1. 什麼是aop

它是面向切面編程,軟件系統分爲:核心關注點和橫切關注點。核心關注點爲:我們業務處理的主要流程,而與業務關係不大的我們稱之爲橫切關注點,比如:權限校驗,事務,日誌,aop主要是分離核心關注點和橫切關注點。

2.aop核心概念

1.切面(aspect):類是對物體特徵的抽象,切面就是對橫切關注點的抽象
2、橫切關注點:對哪些方法進行攔截,攔截後怎麼處理,這些關注點稱之爲橫切關注點。
3、連接點(joinpoint):被攔截到的點,因爲 Spring 只支持方法類型的連接點,所以在 Spring
中連接點指的就是被攔截到的方法,實際上連接點還可以是字段或者構造器。
4、切入點(pointcut):對連接點進行攔截的定義
5、通知(advice):所謂通知指的就是指攔截到連接點之後要執行的代碼,通知分爲前置、後置、
異常、最終、環繞通知五類。
6、目標對象:代理的目標對象
7、織入(weave):將切面應用到目標對象並導致代理對象創建的過程
8、引入(introduction):在不修改代碼的前提下,引入可以在運行期爲類動態地添加一些方法
或字段。

2.2通知類型:

Before —— 在方法被調用之前調用通知;
After —— 在方法完成之後調用通知,無論方法執行是否成功;
After-returning —— 在方法成功執行之後調用通知;
After-throwing —— 在方法拋出異常後調用通知;
Around —— 通知包裹了被通知的方法,在被通知的方法調用之前和調用之後執行自定義的行爲;

3.實現aop


   @Aspect
   @Component
   public class AspectDemo {
   
   		//表示要在哪裏方法裏使用aop切面增強
   		@pointcut("execution(public * com.pb.controller.*.*(..))")    
   		public void point(){
   			System.out.println("我是切入點");
   		}

   		//前置增強
   		@Before(value="point()")   //使用point()這個增強點
   		public void before(){
   			System.out.println("我是前置增強");
   			System.out.println("我是前置增強");
   		} 
   	
   		//後置增強
   		@After(value="point()")   //使用point()這個增強點
   		public void after(){
   			System.out.println("我是後置增強");
   			log();
   		} 

   		//環繞增強
   		@Around (value="point()")   //使用point()這個增強點
   		public void around(ProceedingJoinPoint joinPoint){
   			System.out.println("我是環繞前---增強");
   			joinPoint.proceed();
   			System.out.println("我是環繞後---增強");
   		} 

   		public void log(){
   		 	System.out.println("我要打日誌");
   		}

   }

這樣就不需要在特定的地方寫我們做的的橫切關注點代碼了,因爲這個切面已經幫我們寫好了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章