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);
    
        }
    }
  • 相关阅读:
    第二次作业——结对项目之需求分析与原型模型设计
    第三次作业——结对编程
    采用PowerDesigner 设计数据库
    关于Android开发环境的演变
    广东地区DNS再次瘫痪
    SQL Server 2005 TSQL 中的OUTPUT子句语法
    Visual Studio 里的版本兼容问题
    Javascript 对象扩展积累
    IBatisNet.DataMapper 升级到 1.6.2 之后报错
    ExtJs Extender controls 不错的例子
  • 原文地址:https://www.cnblogs.com/dongma/p/14003331.html
Copyright © 2011-2022 走看看