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

      

  • 相关阅读:
    关于软件工程的疑问
    thinkphp基础入门(2)
    JS What does `void 0` mean?
    第2章 TCPIP的工作方式
    JavaScript中var a=b=c=d的发现
    如何让 Git 忽略掉文件中的特定行内容?
    thinkphp基础入门(1)
    IIS网站服务器性能优化指南(转载)
    240个jquery插件
    解决_动态加载JS文件_调用时出错
  • 原文地址:https://www.cnblogs.com/yunger/p/7648323.html
Copyright © 2020-2023  润新知