cglib maven地址
官方地址
<!-- https://mvnrepository.com/artifact/cglib/cglib -->
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.3.0</version>
</dependency>
被代理对象
package com.freedomsh.proxy;
public class BuyTrainTickeCGLIB {
public void buy() {
System.out.println("购买从北京去上海的高铁票");
}
}
MethodInterceptor实现类
package com.freedomsh.proxy;
import java.lang.reflect.Method;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
public class CGLIBInterceptor implements MethodInterceptor {
@Override
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy)
throws Throwable {
System.out.println("请支付快速抢票费用");
methodProxy.invokeSuper(o, objects);
System.out.println("欢迎下次惠顾,给你张优惠券。");
return null;
}
}
cglig生成代理对象并执行被代理方法
package com.freedomsh.proxy;
import net.sf.cglib.core.DebuggingClassWriter;
import net.sf.cglib.proxy.Enhancer;
public class CGLIBTest {
public static void main(String[] args) {
System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY, "/Volumes/work/project/java/proxy/src/main/java/com/freedomsh/proxy");
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(BuyTrainTickeCGLIB.class);
enhancer.setCallback(new CGLIBInterceptor());
BuyTrainTickeCGLIB buyTrainTickeCGLIB = (BuyTrainTickeCGLIB) enhancer.create();
buyTrainTickeCGLIB.buy();
}
}