zoukankan      html  css  js  c++  java
  • java提供类与cglib包实现动态代理

        终于有点空余时间,决定把之前学习的知识点整理一下,备以后复习。

        动态代理有三角色:抽象角色,代理角色,真是角色。

    第一个记录下java提供的动态代理。即使用Proxy类和InvocationHandel接口。直接上贴上代码:

    class MyInvocationHandel implements InvocationHandler{
        private Object obj; //这是原对象
        //传入源对象,返回代理对象
        public Object bind(Object obj){
            this.obj=obj;
            return Proxy.newProxyInstance(obj.getClass().getClassLoader(),
                    obj.getClass().getInterfaces(), this);
        }
    
        public Object invoke(Object proxy, Method method, Object[] args)
                throws Throwable {
            System.out.println("用户验证成功");
            Object object=method.invoke(obj, args);
            System.out.println("日志记录:xxx在xx时刻调用了"+method.getName());
            return object;
        }
        
    }

        通过invocationHandel接口可以代理对象的方法,我们可以加入日志记录等等,代码很简单,功能很强大。

    第二个记录下通过cglig包实现的动态代理,比java提供的动态代理优点在于可以提供抽象类方法的代理(不知这样说准确不)。要使用这种代理首先需要导入cglib.jar和asm.jar,然后使用Enhancer类与MethodInterceptor接口,代码:

    public class CGlibFactory implements MethodInterceptor{
        private Object targerObj; //原对象
        
            //通过原对象返回代理对象
        public Object createInstance(Object targerObj){
            this.targerObj = targerObj;
            Enhancer en = new Enhancer();
            return en.create(this.targerObj.getClass(),this.targerObj.getClass().getInterfaces(),this);
        }
    
        public Object intercept(Object proxy, Method method, Object[] args,
                MethodProxy methodProxy) throws Throwable {
            System.out.println("用户验证...");
            Object result= methodProxy.invoke(targerObj, args);
            System.out.println("xx用户调用xx方法");
            return result;
        }
    }
  • 相关阅读:
    阿里云快速搭建Node.js开发环境
    初始化阿里云服务器
    docker上安装tomcat
    阿里云搭建支付宝小程序
    阿里云docker上安装redis
    WARN o.a.c.c.AprLifecycleListener [log,175] The Apache Tomcat Native library failed to load. The error reported was [no tcnative1 in java.library.path:
    阿里云快速搭建网站
    云服务器(CentOS系统)完全卸载mysql
    wumeismart编译运行和部署系统
    阿里云ssh关闭,保持jar程序运行
  • 原文地址:https://www.cnblogs.com/zhongkaiuu/p/cglib.html
Copyright © 2011-2022 走看看