歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Spring中的AOP-ProxyFactory

Spring中的AOP-ProxyFactory

日期:2017/3/1 10:21:13   编辑:Linux編程
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. ProxyFactory pf = new ProxyFactory();
  5. pf.setTarget(target);
  6. MessageWriter proxy = (MessageWriter) pf.getProxy();
  7. proxy.writeMessage();
  8. }
  9. public void before(Method method, Object[] args, Object target) throws Throwable {
  10. System.out.println("Before method: " + method.getName());
  11. }
  12. }
重點關注的代碼為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