AOP是在處理Cross-cutting concerns,將某段代碼(日誌)動態切入(不把日誌程式hardcode到業務邏輯方法中)到指定方法(加減乘除)的指定位置進行運行。
昨天我們學到了AOP中的專業術語及Advice的類型
今日我們沿用前日的例子,來講解AOP的細節
切面切入的物件與目標物件皆實作interface,container保存的物件會是代理對象,所以getBean時需要使用接口類型承接,而非MyCalculator
@Test
public void testDay19(){
ApplicationContext ioc = new ClassPathXmlApplicationContext("bean19.xml");
System.out.println("容器啟動完成....");
Calculator calculator = ioc.getBean(Calculator.class);
System.out.println(calculator);
System.out.println(calculator.getClass());
}
Result:此為JDK的動態代理,所以類型為com.sun.proxy
將實作介面去除
@Service
public class MyCalculator{
public int add(int i, int j) {
int result = i+j;
return result;
}
public int sub(int i, int j) {
int result = i-j;
return result;
}
public int mul(int i, int j) {
int result = i*j;
return result;
}
public int div(int i, int j) {
int result = i/j;
return result;
}
}
getBean改用MyCalculator承接
@Test
public void testDay19(){
ApplicationContext ioc = new ClassPathXmlApplicationContext("bean19.xml");
System.out.println("容器啟動完成....");
MyCalculator calculator = ioc.getBean(MyCalculator.class);
System.out.println(calculator);
System.out.println(calculator.getClass());
}
Result:為Cglig的內部類
固定格式: execution(存取修飾子 返回類型 方法全類名(參數表))
通配符: