歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Spring中的AOP-ProxyFactory

1. 前置通知
實現org.springframework.aop.MethodBeforeAdvice接口的before方法,該方法接受三個參數:被調用的方法、傳給該方法的參數和目標對象。
  1. public class SimpleBeforeAdvice implements MethodBeforeAdvice {  
  2.     public static void main(String[] args) {  
  3.         MessageWriter target = new MessageWriter();  
  4.   
  5.         ProxyFactory pf = new ProxyFactory();  
  6.         pf.setTarget(target);  
  7.    
  8.         MessageWriter proxy = (MessageWriter) pf.getProxy();  
  9.    
  10.         proxy.writeMessage();  
  11.     }  
  12.     public void before(Method method, Object[] args, Object target) throws Throwable {  
  13.         System.out.println("Before method: " + method.getName());  
  14.     }  
  15. }  
重點關注的代碼為before方法以及ProxyFactory將實體轉化為代理類的過程。
以上代碼表明在執行MessageWriter的所有方法之前,都會先執行before之內的內容。
 
2. 後置通知
後置通知與前置通知類似,只是後置通知需實現org.springframework.aop.AfterReturningAdvice接口的afterReturning方法,該方法同樣接受三個參數:被調用的方法、傳給該方法的參數和目標對象。
3. 包圍通知
包圍通知在功能上綜合了前置通知和後置通知,除了一個重要區別:我們可以修改方法的返回值,不僅如此,我們還可以阻止目標方法的實際執行。這意味著用包圍通知,我們可以將目標方法的實現完全更換成新的代碼。
包圍通知實現了org.aopalliance.intercept.MethodInterceptor的invoke方法,該方法只接受MethodInvocation對象,但可通過以下方法獲取被調用的方法、傳給該方法的參數和目標對象:
  1. Method m = invocation.getMethod();  
  2. Object target = invocation.getThis();  
  3. Object[] args = invocation.getArguments();  
調用包圍通知的方式與前置通知和後置通知類似,使用ProxyFactory。
4. 拋出通知
拋出通知跟後置通知一樣是在連接點之後運行的,不過拋出通知只在方法拋出一個異常時才執行。
拋出通知實現org.springframework.aop.ThrowsAdvice接口,該接口沒有定義任何方法,Spring是通過查看拋出通知中的一個或多個名為afterThrowing的public方法來處理拋出通知的。該方法的返回值類型並不重要,不過一般定義為void,因為該方法不能返回任何有意義的值。
對於拋出的每一個異常,Spring只會運行一個afterThrowing。
Copyright © Linux教程網 All Rights Reserved