zoukankan      html  css  js  c++  java
  • JDK动态代理小例子

    一个小汽车,有一个跑run()的方法,我们想使用jdk动态代理使小汽车执行run之前 加点油,run之后洗车。

    有四个类,接口Car(小汽车)Kayan(具体实现类(卡宴)) CarProxy(汽车的代理) Test(测试类)

    Car

    public interface Car {
    
        public void run();
     }

    Kayan这个是小汽车实现类

    public class Kayan implements Car {
    
        @Override
        public void run() {
    
            System.out.println("小汽车开始跑。。。。。。。。");
        }
    
    }


    CarProxy  小汽车的代理类

    public class CarProxy implements InvocationHandler {
    
        // 小汽车会被代理
        private Car car;
    
        // 通过set传入小汽车
        public Car getCar() {
    
            return car;
        }
    
        public void setCar(Car car) {
    
            this.car = car;
        }
    
        public Car creatCarProxy() {
    
            Car proxy = (Car) Proxy.newProxyInstance(car.getClass().getClassLoader(), car.getClass().getInterfaces(), this);
            return proxy;
    
        }
    
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    
            if ("run".equals(method.getName())) {
                // 小汽车想要跑之前那要先加油啊
                System.out.println("给小汽车加油啊。。oil。。oil。。oil");
                Object object = method.invoke(car, args);
                System.out.println("跑完之后给小汽车擦车啊。。clean。。clean");
                return object;
    
            }
    
            return method.invoke(car, args);
        }
    
    }


    测试代码

    // 测试小汽车的代理
        @Test
        public void testCarProxy() {
    
            Car ky = new Kayan();
            CarProxy proxy = new CarProxy();
            proxy.setCar(ky);
            Car carProxy = proxy.creatCarProxy();
            carProxy.run();
    
        }


    最后的结果显示

     这种实现的思想类似于Spring的Aop的实现思路,但是AOP在使用jdk动态代理的时候也是用CGLib代理 。

  • 相关阅读:
    python使用mysql数据库
    拆掉思维里的墙
    拆掉思维里的墙
    拆掉思维里的墙
    loadrunner通过web的post请求方法测接口 2
    loadrunner通过web的post请求方法测接口 2
    loadrunner通过web的post请求方法测接口 1
    luogu P1186 玛丽卡
    luogu P1855 榨取kkksc03
    暑期前复习
  • 原文地址:https://www.cnblogs.com/zhanghaoliang/p/6475636.html
Copyright © 2011-2022 走看看