cglib动态代理简介说明
下文笔者讲述cglib动态代理简介说明,如下所示
例:
cglib动态代理简介
CGLib动态代理: 是基于底层字节码技术的一种代理技术 CGLib动态代理原理: 通过字节码技术为一个类创建子类 并在子类中采用方法拦截的技术拦截所有父类方法的调用 织入横切逻辑img
例:
目标类 package com.java265.cglib; public class Target { public String execute() { String message = "-----------test------------"; System.out.println(message); return message; } } 通用代理类 package com.java265.cglib; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; import java.lang.reflect.Method; public class MyMethodInterceptor implements MethodInterceptor{ @Override public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable { System.out.println(">>>>MethodInterceptor start..."); Object result = proxy.invokeSuper(obj,args); System.out.println(">>>>MethodInterceptor ending..."); return "result"; } } 测试类 package com.java265.cglib; import net.sf.cglib.proxy.Enhancer; public class CglibTest { public static void main(String[] args) { System.out.println("***************"); Target target = new Target(); CglibTest test = new CglibTest(); Target proxyTarget = (Target) test.createProxy(Target.class); String res = proxyTarget.execute(); System.out.println(res); } public Object createProxy(Class targetClass) { Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(targetClass); enhancer.setCallback(new MyMethodInterceptor()); return enhancer.create(); } }
----运行以上代码,将输出以下信息------- *************** >>>>MethodInterceptor start... -----------test------------ >>>>MethodInterceptor ending... result
注意事项: 代理对象的生成过程由Enhancer类实现 具体步骤如下所示: 1.生成代理类Class的二进制字节码; 2.通过Class.forName加载二进制字节码,生成Class对象; 3.通过反射机制获取实例构造,并初始化代理类对象。
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。