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