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();
    		
    	}
    }
    

      

  • 相关阅读:
    2017.10.30 天晴 昨天十公里没减肥
    我的一辩论点,随心而论
    2017.10.27 多云 天气晴
    2017.10.14 多云 天气转冷
    2017.10.9 天晴 准备减肥,有一起打卡的吗
    2017.10.7 国庆第8天
    2017.10.7 国庆第7天{鳏寡孤独}
    java多线程概念
    spring mvc分拣查询参数
    spring mvc 导出excel
  • 原文地址:https://www.cnblogs.com/yunger/p/7648323.html
Copyright © 2011-2022 走看看