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

    jdk动态代理基于接口

    public interface Fly {
        void fly();
    }
    public class Person implements Fly {
    
        @Override
        public void fly() {
            System.out.println("person fly==");
        }
    }
    public class Client {
        public static void main(String[] args) {
    
            Person person =new Person();
    
    
            Fly proxyInstance = (Fly) Proxy.newProxyInstance(Fly.class.getClassLoader(),
                    Person.class.getInterfaces(),
                    new InvocationHandler() {
                        @Override
                        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                            System.out.println("---before");
                            return method.invoke(person,args);
                        }
                    });
    
            proxyInstance.fly();
    
    
        }

    cglib动态代理基于继承

    public final class Book {
        private String name;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    import org.springframework.cglib.proxy.Enhancer;
    import org.springframework.cglib.proxy.MethodInterceptor;
    import org.springframework.cglib.proxy.MethodProxy;
    
    import java.lang.reflect.Method;
    
    public class BookCglib implements MethodInterceptor {
    
        private Object target;
    
        public Object getProxy(Object target){
            this.target = target;
            Enhancer enhancer = new Enhancer();
            enhancer.setSuperclass(this.target.getClass());
            enhancer.setCallback(this);
            return enhancer.create();
        }
    
        @Override
        public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
            System.out.println("cglib before");
            methodProxy.invokeSuper(o,objects);
            return null;
        }
    }
    public class CglibClient {
        public static void main(String[] args) {
            Book book = new Book();
            BookCglib bookCglib = new BookCglib();
    
            Book proxy = (Book) bookCglib.getProxy(book);
            String name = proxy.getName();
    
            System.out.println(name);
    
        }
    }
  • 相关阅读:
    2020前端学习路线 之完结篇
    axios 请求超时,设置重新请求的完美解决方法
    如何终止前端发起的请求?
    轮询与长轮询
    最全React技术栈技术资料汇总(收藏)
    React 服务端渲染完美的解决方案
    将数组格式的字符串转换成数组
    Cannot read property 'map' of undefined
    计算机编码方式简介
    python01之文件处理
  • 原文地址:https://www.cnblogs.com/dongma/p/14003331.html
Copyright © 2011-2022 走看看