2018-02-25 java对类的方法加强(三)

2018-02-26  本文已影响0人  紫杉叶子

动态代理

@Test
    public void test3() {
        
        //产生一个猫的代理
        ICat cat = new Cat();
        
        //interfaces ---- 要的是真实哪个类的代理对象
        ICat proxyCat = (ICat) Proxy.newProxyInstance(MethodEnhancement.class.getClassLoader(), cat.getClass().getInterfaces(),new InvocationHandler() {
            
            
            //proxy ---- 代理对象
            //method ---- 把要去加强的方法当做一个对象传递进来了
            //args ---- 方法里的参数,封装到一个object数组对象传进来了
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) 
                    throws Throwable {
                if(method.getName().equals("run")) {
                    
                    //说明调用的是run方法
                    System.out.println("我家的小猫真是猫中的战斗机");
                    
                    //调用原有的逻辑
                    return method.invoke(cat, args);
                }
                
                //其他方法正常执行
                return method.invoke(cat, args);
            }
        });
        
        //proxyCat代理猫
        
        //当调用了代理对象的任何方法,都会执行invoke方法里的逻辑
        proxyCat.run();
        //proxyCat.hashCode();
        
    }
    
上一篇下一篇

猜你喜欢

热点阅读