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

      

  • 相关阅读:
    Castle 开发系列文章
    ASP.NET MVC 3 Release Candidate 发布喽
    Scott Hanselman on SpeakerWiki
    2010年上半年计算机软考软件设计师试卷参考答案
    一站式示例代码库2010年11月5日更新
    从数据到代码—基于T4的代码生成方式
    CodeDOM
    老吉优秀的数据库访问层代码(转)
    非关语言: 设计模式
    EntLib
  • 原文地址:https://www.cnblogs.com/yunger/p/7648323.html
Copyright © 2020-2023  润新知