關於Java 實現抽象類的抽象方法的特性的利用---面向切面
阿新 • • 發佈:2017-05-26
light 統計 其實在 mybatis print point pointcut myba pan
今天看工作看代碼突然有了以下設想:
/**
* Created by zq on 2017/5/25.
* 抽象類
*/
public abstract class AbstractC {
public void C(){
D();
System.out.println("C_1");
E();
}
public abstract void D();
// {
// System.out.println("C_1");
// }
public abstract void E();
// {
// System.out.println("C_2");
// }
}
關鍵點事陰影部分的方法c();
如下代碼利用抽象類的抽象方法的實現包裝的思想:
/** * Created by zq on 2017/5/25.
* 利用抽象類的抽象方法實現包裝的思想 */ public class AbstractWay { public static void main(String [] args){ new AbstractC() { @Override public void D() { System.out.println("C_2"); } @Override public void E() { System.out.println("C_3"); } }.C(); } }
如上,其實在諸如spring,mybatis框架中,都有這種包裝的思想,在spring中,這種思想被定義為aop(面向切面編程),比如spring註解的實現(如:@[email protected]),將代碼中System.out.println("C_1"); 替換成“反射”的相關方法,即可達到在執行某方法前後,執行預先設定的業務邏輯,比如訪問統計,日誌記錄等.
關於Java 實現抽象類的抽象方法的特性的利用---面向切面