1、mavne引jar包
<!-- https://mvnrepository.com/artifact/cglib/cglib -->
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.2.9</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.ow2.asm/asm -->
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
<version>7.0</version>
</dependency>
2、代码示例
import java.lang.reflect.Method;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
public class MyInterceptor implements MethodInterceptor {
public Object getProxy(Class<?> clzss) {
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(clzss);
// 设置回调方法
enhancer.setCallback(this);
// 创建代理对象
return enhancer.create();
}
@Override
public Object intercept(Object object, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
System.out.println(method.getName());
System.out.println("事务开始。。。");
// Object result = method.invoke(object, args); //死循环,内存溢出
// Object result = methodProxy.invoke(object, args);//死循环,内存溢出
Object result = methodProxy.invokeSuper(object, args);
System.out.println("事务结束。。。");
return result;
}
public class CglibTest {
public static void main(String[] args) {
MyInterceptor interceptor = new MyInterceptor();
CglibTest cglibTest = (CglibTest) interceptor.getProxy(CglibTest.class);
cglibTest.operate1();
System.out.println();
cglibTest.operate2();
}
public void operate1() {
System.out.println("操作数据库1");
}
public void operate2() {
System.out.println("操作数据库2");
}
}
3、输出结果
operate1
事务开始。。。
操作数据库1
事务结束。。。
operate2
事务开始。。。
操作数据库2
事务结束。。。