1.AOP內部工作原理是通過代理對象實現織入功能
對於有接口實現的對象使用JDK動態代理
對於無接口實現的對象使用Cglib動態代理
2.CGLIB(code generator library)代碼生成庫——第三方技術
作用:動態的生成字節碼
CGLIB中的核心對象是Enhance對象,它的作用是創建一段動態的類字節碼。
CGLIB可以對任意的類進行代理,JDK的代理只能對實現接口的類進行代理
public class MyCglibProxyObject implements MethodInterceptor {
//提供一個方法用於創建Animal類的代理對象
public Animal createCglibProxyObject(){
//1.在內存中創建一個動態的類的字節碼
Enhancer enhancer = new Enhancer(); //此時並沒有做繼承
//2.爲其指定父類
//除了完成繼承關係外,還將父類所有的方法名反射過來,並在自己的類中創建了這些方法 enhancer.setSuperclass(Animal.class);
//3.指定其回調操作
enhancer.setCallback(this);
//4.使用該類創建對象
return (Animal) enhancer.create();
}
public Object intercept(Object proxy, Method method, Object[] args,MethodProxy methodProxy) throws Throwable {
if(method.getName().equals("eat")){
System.out.println("吃前來個開胃菜");
}
return methodProxy.invokeSupper(proxy, args);
}
}