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

      jdk的动态代理需要目标类必须实现一个接口;

      cglib动态代理不需要实现接口就可以进行代理

      需要依赖一个jar包

            <dependency>
                <groupId>cglib</groupId>
                <artifactId>cglib</artifactId>
                <version>2.2.2</version>
            </dependency>
    final修饰的方法不可以进行代理;

    案例代码

    创建一个代理目标类
    public class Dog {
    
        final public void run(String name) {
            System.out.println(""+name+"----run");
        }
    
        public void eat() {
            System.out.println("狗----eat");
        }
    }

      编写代理类

    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 o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
            System.out.println("这里是对目标类进行增强!!!");
            Object object = methodProxy.invokeSuper(o,objects);
            return object;
        }
    }

      测试类

    public class MainTest {
    
        public static void main(String[] args) {
    
            //创建Enhancer对象,类似于JDK动态代理的Proxy类,下一步就是设置几个参数
            Enhancer enhancer = new Enhancer();
            //设置目标类的字节码文件
            enhancer.setSuperclass(Dog.class);
            //设置回调函数
            enhancer.setCallback(new MyMethodInterceptor());
    
            //这里的creat方法就是正式创建代理类
            Dog proxyDog = (Dog)enhancer.create();
            //调用代理类的eat方法
            proxyDog.eat();
        }
    }

      运行结果

      

  • 相关阅读:
    理解原型Prototype、继承
    解决js跨域问题的基本方法之 -------JSONP
    CSS3中动画效果Transitions与Animations的区别
    支付宝支付实例
    上线实例
    Celery
    Redis
    git
    jwt认证
    登录认证
  • 原文地址:https://www.cnblogs.com/qq376324789/p/13995050.html
Copyright © 2011-2022 走看看