動態代理第二種:cglib動態代理
首先需要導入jar包(cglib-2.2.2.jar---字節碼增強)、asm.jar 兩個包都是用於操作字節碼。但是spring-core核心包裏面都包含
1)只需要編寫實現類(沒有接口)
2)繼承目標類
需要藉助於Enhancer對象
Enhancer enhancer=new Enhancer()
爲enhancer對象設置父類(父類爲目標類)
enhancer.setSuperClass(UserDaoImpl.class);
代理方法,用callback
Callback callback=new MethodInterceptor() {
@Override
public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
//手工調用目標類的目標方法
System.out.println("開啓事務");
Object object=method.invoke(dao, args);
System.out.println("銷燬");
return null;
}
};
意思是每次目標類調用方法都進行攔截
enhancer.setCallback(callback);
創建代理對象
UserDaoImpl proxy=(UserDaoImpl)enhancer.create();