zoukankan      html  css  js  c++  java
  • 关于动态代理

    ---恢复内容开始---

      动态代理是相对于静态代理来说的,相比于后者,前者能够增强代码的复用性,可以处理一类对象。

      动态代理两种分别是JDK动态代理和Cglib动态动态代理:

      前者要求代理类对象和委托类实现相同的接口,否则不能生成代理对象,而且指定方法较为麻烦。代码如下:

      public class Proxy{

        //获取代理对象的静态方法

        public static Object getProxy(final Object target , final TranactionManager tx){

        //利用target参数获取类加载器,真实对象类上的接口和指定接口,创建代理对象     

        Object  proxy = Proxy.NewInstance(target.getClass().getClassLoader , target.getClass().getInterfaces() , new InvocationHandler( ){

             //当与方法关联的代理实例上调用方法时,将在调用处理程序上调用此方法

              @override

              public Object invoke(Object proxy,Method method , Object[] args) throws throwable{

            tx.begin();

            method.invoke(target,args);

            tx.commit();

            } 

          });

    return  proxy;   

        }

      }

      后者不管有无接口都可以实现代理对象,生成的代理对象时目标对象的子类

    public class DynamicProxy {
     
     //获取代理对象
     public static Object getProxy(final Object target,final TranactionManager tx){
      
      //增强器   底层操作的是二进制码
      Enhancer enhancer = new Enhancer();
      
      //设置接口
      enhancer.setInterfaces(target.getClass().getInterfaces());
      
      //设置父类
      enhancer.setSuperclass(target.getClass());

      //创建代理对象
      return enhancer.create();
      
      //设置回调  代理对象调用方法时,此方法进行拦截,进入到此方法中

    //当与方法关联的代理实例上调用方法时,将在调用处理程序上调用此方法
      enhancer.setCallback(new MethodInterceptor() { 
       @Override
       public Object intercept(Object proxy, Method method, Object[] args,
         MethodProxy methodProxy) throws Throwable {
        
        tx.begin();
        //调用真实对象的方法
        Object result = method.invoke(target, args);
        tx.commit();
        
        return result;
       }
      });
      

      
     }
    }

      

    ---恢复内容结束---

  • 相关阅读:
    [CF1038F]Wrap Around[AC自动机+dp]
    [LOJ#6198]谢特[后缀数组+trie+并查集]
    [CF986F]Oppa Funcan Style Remastered[exgcd+同余最短路]
    [CF587F]Duff is Mad[AC自动机+根号分治+分块]
    [CF995F]Cowmpany Cowmpensation[树形dp+拉格朗日插值]
    [CF917D]Stranger Trees[矩阵树定理+解线性方程组]
    [CF1007D]Ants[2-SAT+树剖+线段树优化建图]
    [CF1007B]Pave the Parallelepiped[组合计数+状态压缩]
    [CF1010E]Store[kd-tree]
    【JZOJ3598】【CQOI2014】数三角形
  • 原文地址:https://www.cnblogs.com/sxpy-lj/p/7076210.html
Copyright © 2011-2022 走看看