zoukankan      html  css  js  c++  java
  • java反射

    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    
    import org.junit.Test;
    interface Fly {
    
    	public void gotoFly();
    	
    	public void stopFly();
    }
    class Bird implements Fly{
    
    	@Override
    	public void gotoFly() {
    		System.out.println("鸟儿张开翅膀要飞起来了。。。。");
    	}
    
    	@Override
    	public void stopFly() {
    		System.out.println("准备停飞。。。。");
    	}
    	
    	public void eatBug(){
    		System.out.println("鸟要吃虫子,补充体力。。。");
    	}
    
    }
    
    
    public class ProxyTest {
    
    	@Test
    	public void demo1(){
    		// JDK 自动代理 的原理是  根据 类加载器和接口  创建代理类(此代理类是接口的实现类,所以必须使用接口
    		
    		// 1、 创建真是业务对象的引用
    		Fly fly = new Bird();
    		
    		Fly proxy = (Fly) Proxy.newProxyInstance(fly.getClass().getClassLoader(), 
    				                                 fly.getClass().getInterfaces(), 
    				                                 new InvocationHandler() {
    			// 2、使用真是业务对象类加载器和接口,在内存中创建代理对象
    			@Override
    			public Object invoke(Object proxy, Method method, Object[] args)
    					throws Throwable {
    				System.out.println(method.getName());
    				// 拦截方法
    				if(method.getName().equals("stopFly")){
    					System.out.println("被拦截了,鸟飞不走了。。。");
    					return null;
    				}
    				// 不拦截就invoke
    				return method.invoke(proxy, args);
    			}
    		});
    		proxy.stopFly();
    		proxy.gotoFly();
    		
    	}
    }
    

      

  • 相关阅读:
    iphone/iOS 访问本地数据库sqlite3
    SQLITE3 --详解
    iOS使用MD5
    ASIHTTPRequest实现断点续传
    ios开发
    iOS 5的文件存储策略应对
    由ASIHttpRequest里的block引发的思考
    Blocks编程要点
    [Cocoa]深入浅出Cocoa多线程编程之 block 与 dispatch quene
    ASIHTTPRequest 问题总结
  • 原文地址:https://www.cnblogs.com/yunger/p/7648323.html
Copyright © 2011-2022 走看看