基於cglib的動態代理
阿新 • • 發佈:2021-02-12
目標物件
Target.java
public class Target {
public void save(){
System.out.println("running......");
}
}
通知,加強類
Advice.java
public class Advice {
public void before(){
System.out.println("前置加強");
}
public void afterRunning (){
System.out.println("後置加強");
}
}
測試類
import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;
import java.lang.reflect.Method;
public class cglibTest {
public static void main(String[] args) {
//目標物件
final Target target = new Target();
//加強物件
final Advice advice = new Advice();
//返回值就是動態代理物件 基於cglib
//建立增強器
Enhancer enhancer = new Enhancer();
//設定父類(目標)
enhancer.setSuperclass(Target.class);
//設定回撥
enhancer.setCallback(new MethodInterceptor() {
public Object intercept(Object proxy, Method method, Object[] ages, MethodProxy methodProxy) throws Throwable {
advice.before();//執行前置
Object invoke = method.invoke(target, ages);//執行目標
advice.afterRunning();//執行後置
return invoke;
}
});
//建立代理物件
Target proxy = (Target) enhancer.create();
proxy.save();
}
}
執行結果