zoukankan      html  css  js  c++  java
  • AOP的底层实现,动态代理和cglib代理


    JDK动态代理
    public Object proxy(Object target){
    Object proxyInstance = Proxy.newProxyInstance(
    MyJDKProxyTransactionManager.class.getClassLoader(),
    target.getClass().getInterfaces(),
    new InvocationHandler() {
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    Object o = null;
    try {
    System.out.println("开启事物");
    jdbcConnectionUtils.openTx();
    o = method.invoke(target, args);
    jdbcConnectionUtils.commitAndClose();
    System.out.println("提交事物");
    return o;
    } catch (Exception e) {
    e.printStackTrace();
    jdbcConnectionUtils.rollbackAndClose();
    }
    return o;
    }
    }
    );
    return proxyInstance;
    }





    cglib代理
    public static void main(String[] args) {
    Enhancer enhancer = new Enhancer();
    MyCar myCar = new MyCar();
    enhancer.setSuperclass(myCar.getClass());
    enhancer.setCallback(new MethodInterceptor() {
    @Override
    public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
    Object o = null;
    try {
    System.out.println("cglib 代理前");
    o = method.invoke(myCar, args);
    System.out.println("cglib代理后");
    return o;
    } catch (Exception e) {
    e.printStackTrace();
    }
    return o;
    }
    });
    MyCar cglibCar = (MyCar) enhancer.create();
    cglibCar.jump();
    cglibCar.run();
    }


  • 相关阅读:
    day9文件处理
    day8字符编码
    js小数乘法精确率问题
    webstorm上传vue代码至git
    vue项目关闭eslint检查
    MongoDB相关操作
    Redis持久化存储
    Redis 数据类型
    linux常用命令
    初识NoSQL
  • 原文地址:https://www.cnblogs.com/chenligeng/p/13179967.html
Copyright © 2011-2022 走看看