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);
    
        }
    }
  • 相关阅读:
    简单的倒计时 时间显示
    git submodule
    使用选择器语法来查找元素
    yo bootstrap mui 使用对比
    flexbox 兼容安卓4.3
    mac 下 php 安装 中的坑
    微信网页开发
    能发送http请求(get,post)的工具
    h5宣传页制作过程中遇到的问题
    功能模块图、业务流程图、处理流程图、ER图,数据库表图(概念模型和物理模型)画法
  • 原文地址:https://www.cnblogs.com/dongma/p/14003331.html
Copyright © 2011-2022 走看看