Github: https://github.com/cglib/cglib 依賴
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.3.0</version>
</dependency>
目标類
package com.demo.cgbib;
public class Dog {
public void sayHello(String name){
System.out.println("Hello " + name);
}
}
方法攔截器
package com.demo.cgbib;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
import java.lang.reflect.Method;
public class LogInterceptor implements MethodInterceptor {
@Override
public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
System.out.println("before");
// 調用父類方法,不是反射
Object result = proxy.invokeSuper(obj, args);
System.out.println("after");
return result;
}
}
測試類
package com.demo.cgbib;
import net.sf.cglib.proxy.Enhancer;
public class Demo {
public static void main(String[] args) {
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(Dog.class);
enhancer.setCallback(new LogInterceptor());
Dog dog = (Dog) enhancer.create();
dog.sayHello("Tom");
}
}
輸出結果
before
Hello Tom
after
參考 CGLib動态代理