1. 程式人生 > 其它 >基於cglib的動態代理

基於cglib的動態代理

技術標籤:Javaproxycglib動態代理

目標物件
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(); } }

執行結果
在這裡插入圖片描述