1. 程式人生 > >嘗試模擬實現AOP(一)

嘗試模擬實現AOP(一)

大體思路:

  1. 除了模擬實現IOC準備的東西外,還需要準備一套有關攔截器的類以及相關注解;
  2. 包括類InterceptorFactory、InterceptorScanner、,註解After、Before、ThorwException、Aspect;
  3. 一個描述攔截器的類IntercepterMethodDefination和一個描述被攔截的類IntercepterTargetDefination;
  4. 首先,掃描攔截器類,判斷是否帶有Aspect註解,然後判斷帶有Befor註解,將符合條件攔截器類物件方法Befor註解的傳入對應的處理方法中;
  5. 處理方法中首先判斷傳過來的方法返回值是否為boolean,不是則丟擲前置攔截器[]返回值只能是boolean異常。根據befor註解得到被攔截的類,根據傳過來的攔截器方法引數和Befor註解得到方法名稱得到被攔截的方法,將類和方法加入InterceptorFactory中的beforMap中;
  6. 和4.5步驟一樣,處理After、ThorwException。這樣是實現了將攔截器以及被攔截的類的方法儲存到了HashMap中。

注意:

  1. 前置攔截器的方法的返回值只能是boolean,引數需要和被攔截的方法相同,以便通過攔截器的這個方法得到被攔截的方法。Before註解屬性應該有被攔截類和方法名稱。
  2. 後置攔截器的方法的返回值需要和被攔截的類的方法返回值相同。After註解屬性應該有類、方法名稱和方法引數型別。
  3. 異常攔截器的方法形參型別只能是Throwable、返回值是void。ThorwException註解屬性應該有類、方法名稱和方法引數型別。