Java动态代理之cglib
2017-07-02 14:34
246 查看
cglib是对jdk动态代理的补充,弥补了因没有接口的类生成代理类的缺失。
下面通过简单的例子学习一下cglib的使用,当然,要是用需要第三方的jar包,jar包自行下载。
业务类
业务增强类
下面通过简单的例子学习一下cglib的使用,当然,要是用需要第三方的jar包,jar包自行下载。
业务类
public class BankService { public void save(){ System.out.println("存钱..."); } }
业务增强类
public class ServiceEnhancer { public static void before(){ System.out.println("检查钱是否完整无存"); } public static void after(){ System.out.println("如果有错,就回滚"); } }
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 CglibProxy implements MethodInterceptor{ private Enhancer enhancer = new Enhancer(); public Object getProxy(Class<?> clazz){ //设置 需要创建子类的类 enhancer.setSuperclass(clazz); enhancer.setCallback(this); return enhancer.create();//通过字节码技术创建子类实例 } @Override public Object intercept(Object obj, //目标类实例 Method method, //目标类方法的反射对象 Object[] args, //方法的动态入参 MethodProxy proxy //代理类实例 ) throws Throwable { ServiceEnhancer.before(); Object result = proxy.invokeSuper(obj, args); ServiceEnhancer.after(); return result; } }
public class CglibDemo { public static void main(String[] args) { CglibProxy proxy = new CglibProxy(); BankService bankservice = (BankService) proxy.getProxy(BankService.class); bankservice.save(); //com.proxy.cglib.BankService$$EnhancerByCGLIB$$82923c9a@2e5d6d97 //System.out.println(bankservice); } }
相关文章推荐
- Java动态代理二——CGLIB动态代理应用
- java动态代理(JDK和cglib)
- java的cglib动态代理报java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter
- java动态代理(JDK和cglib)
- 转:Spring中AOP的两种代理方式(Java动态代理和CGLIB代理)
- java动态代理2 (cglib 不用实现接口)
- java的cglib动态代理报java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter
- java动态代理(JDK和cglib)
- java动态代理(JDK和cglib)
- Java之代理(jdk静态代理,jdk动态代理,cglib动态代理,aop,aspectj)
- java动态代理(JDK和cglib)
- java动态代理(JDK和cglib)
- java jdk和cglib动态代理
- java动态代理(JDK和cglib)
- java动态代理(JDK和cglib)
- java动态代理(JDK和cglib)
- java动态代理(JDK和cglib)
- java 静态代理 动态代理 CGLib代理 浅析
- java动态代理(JDK和cglib)
- Java之代理(jdk静态代理,jdk动态代理,cglib动态代理,aop,aspectj)