zoukankan      html  css  js  c++  java
  • 动态代理

    interface AService{
        void fly();
    }
    class AServiceImpl implements AService{
        @Override
        public void fly(){
            System.out.println("fly......");
        }
    }
    
    // jdk自带动态代理实现方式
    class JDKHandler implements InvocationHandler {
        private Object obj;
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            // proxy是生成的代理类对象 
            System.out.println("开始时间:"+System.currentTimeMillis());
            Object ret = method.invoke(obj,args);
            System.out.println("结束时间:"+System.currentTimeMillis());
            return ret; // 返回原方法的结果
        }
        public JDKHandler(Object obj){
            this.obj = obj;
        }
    }
    
    // cglib方式
    class CglibHandler implements MethodInterceptor {
        @Override
        public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
            // proxy 是代理的方法对象
            System.out.println("开始时间:"+System.currentTimeMillis());
            Object ret = proxy.invokeSuper(obj,args); // 注意此处是invokSuper
            System.out.println("结束时间:"+System.currentTimeMillis());
            return ret
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            AService service = new AServiceImpl();
            AService proxy = (AService) Proxy.newProxyInstance(
                AService.class.getClassLoader(),
                service.getClass().getInterfaces(),
                // 此处是子类实现的接口,根据子类获取,不能根据接口类获取
                // Aservice.class.getInterfaces() 错误
                // AserviceImpl.class.getInterfaces()
                new JDKHandler(service));
            proxy.fly();
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            Enhancer enhancer = new Enhancer();
            enhancer.setSuperclass(AServiceImpl.class);// 此处是子类,不是接口,要注意
            enhancer.setCallback(new CglibHandler());
            ((AServiceImpl) enhancer.create()).fly();
        }
    }
    
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,如有问题, 可评论咨询.
  • 相关阅读:
    P1662 数7
    P3645 [APIO2015]雅加达的摩天楼
    P3396 哈希冲突
    P7479 至曾是英雄的您
    P7480 Reboot from Blue
    Apache Commons Collections
    ESP8266 WIFI杀手
    ESP8266 固件升级
    ESP8266 MicroPython安装与使用
    Window 安装子系统
  • 原文地址:https://www.cnblogs.com/Dean0731/p/14476538.html
Copyright © 2011-2022 走看看