• 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);
    
        }
    }
  • 相关阅读:
    求n(n>=2)以内的质数/判断一个数是否质数——方法+细节优化
    poj1185炮兵阵地 正确代码及错误代码分析
    运算符优先级的几点注意
    mod(%)之规律(除数与被除数的正负分析)
    css背景
    Content-Type
    vue数组的增改和v-model的绑定使用Demo
    python open函数关于w+ r+ 读写操作的理解(转)
    http状态码解释
    cookie与token对比(转)
  • 原文地址:https://www.cnblogs.com/dongma/p/14003331.html
Copyright © 2020-2023  润新知