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);
    
        }
    }
  • 相关阅读:
    drf 反序列化
    drf学习 第一天 序列化器
    flex学习之作用在items上的属性
    flex学习之align-content
    flex学习之flex-wrap
    flex学习之align-itmes
    flex弹性盒子中jstify-content
    将主机变为服务器,ssh连接出现access denied
    为什么用tensor不用array?
    深度学习之Epoch、Batch、Iteration
  • 原文地址:https://www.cnblogs.com/dongma/p/14003331.html
Copyright © 2011-2022 走看看