<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2.2</version>
</dependency>
package com_.dxy_test_.cglib_proxy_;
import net.sf.cglib.core.DebuggingClassWriter;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
import java.lang.reflect.Method;
public class CglibDynamicProxyTest {
public static void main(String[] args) {
System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY, "./code");
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(Suitor.class);
enhancer.setCallback(new ProxyEnhancer(new Suitor()));
Suitor _proxy = (Suitor) enhancer.create();
System.out.println("_proxy_super_class: " + _proxy.getClass().getSuperclass().getName());
_proxy.sendLetter("小丽");
System.out.println("\n\n调用final、static方法测试是否会被代理:");
_proxy.finalMethod();
Suitor.staticMethod();
}
}
class Suitor {
public void writeLetter(String name) {
System.out.println("写情书:" + name + ",我喜欢你!");
}
public void sendLetter(String name) {
writeLetter(name);
System.out.println("送情书:" + name + ",这是有人送你的情书!");
}
public final void finalMethod() {
System.out.println("final method");
}
public static void staticMethod() {
System.out.println("static method");
}
}
class ProxyEnhancer implements MethodInterceptor {
private Suitor suitor;
public ProxyEnhancer() {
}
public ProxyEnhancer(Suitor suitor) {
this.suitor = suitor;
}
@Override
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
String s = "writeLetter".equals(method.getName()) ? "写情书" :
("sendLetter".equals(method.getName()) ? "送情书" : "");
System.out.println("增强逻辑【" + s + "】>>>>>>>>>>>>>开始");
Object invoke = method.invoke(suitor, objects);
System.out.println("增强逻辑【" + s + "】>>>>>>>>>>>>>结束");
return invoke;
}
}