Cglib 底层通过 ASM 框架实现;
通过实现MethodInterceptor 接口来定义横切逻辑
测试用例
创建代理类
import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;
public class CglibProxyFactory implements MethodInterceptor {
// 维护目标对象
private Object target;
public CglibProxyFactory(Object target) {
this.target = target;
}
// 给目标对象创建一个代理对象
public Object getProxyInstance() {
// 1.工具类
Enhancer en = new Enhancer();
// 2.设置父类
en.setSuperclass(target.getClass());
// 3.设置回调函数
en.setCallback(this);
// 4.创建子类(代理对象)
return en.create();
}
@Override
public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
System.out.println("开始事务...");
// 执行目标对象的方法
Object returnValue = method.invoke(target, args);
System.out.println("提交事务...");
return returnValue;
}
}
测试
public class CglibProxyAppTest {
@Test
public void test() {
// 目标对象
UserDao target = new UserDao();
// 代理对象
UserDao proxy = (UserDao) new CglibProxyFactory(target).getProxyInstance();
// 执行代理对象的方法
proxy.save();
}
}
原文:https://www.cnblogs.com/Jomini/p/13658921.html