zoukankan      html  css  js  c++  java
  • 18.5.1使用Proxy和InvocationHandler创建动态代理

    package d18_5_1;
    
    public interface Person {
    
    	void walk();
    
    	void sayHello(String name);
    }
    

      

    package d18_5_1;
    /**
     * proxy提供了两个方法来创建动态代理类和动态代理实例
     * static Class<?> getProxyClass(ClassLoader loader,Class<?>... interface)
     * static Object newProxyInstance(ClassLoader loader,Class<?>[] interface,InvocationHandler handler)
     */
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    
    class MyInvocationHandler implements InvocationHandler {
    	/**
    	 * 执行动态代理对象的所有方法时,都会被替换成执行如下的invoke的方法
    	 * 其中:
    	 *    proxy代表动态代理对象
    	 *    method代表正在执行的方法
    	 *    args代表执行代理对象方法时传入的实参
    	 */
    	@Override
    	public Object invoke(Object proxy, Method method, Object[] args)
    			throws Throwable {
    		System.out.println("正在执行的方法:" + method);
    		if (args != null) {
    			System.out.println("下面是执行该方法时传入的实参");
    			for (Object val : args) {
    				System.out.println(val);
    			}
    		} else {
    			System.out.println("调用该方法无须实参!");
    		}
    		return null;
    	}
    }
    
    public class ProxyTest {
    	public static void main(String[] args) {
    		//创建以恶搞InvocationHandler对象
    		//InvocationHandler handler=new MyInvocationHandler();
    		InvocationHandler handler=new MyInvocationHandler();
    		//使用指定的InvocationHandler来生成一个动态代理对象
    		Person p=(Person)Proxy.newProxyInstance(Person.class.getClassLoader(),
    				new Class[]{Person.class}, handler);
    		//调用动态代理对象的walk()和sayHello()方法
    		p.walk();
    		p.sayHello("齐天大圣");
    		
    		
    	}
    }
    

      

  • 相关阅读:
    为你的 Github 博客加个 CMS -「内容管理」
    Alpha、Beta、RC、GA、LTS等软件各个版本号的含义
    WPF圆形进度条
    初试WPF代码迁移Core WPF
    dumpbin查看(Exe,Dll)是32位还是64位
    Windows Live Writer使用SyntaxHighlighter代码着色插件
    C#调用EnumDevice获取设备信息
    C#获取设备(Audio和Video)名称 简单整理
    C# Winform 换肤
    C# Winform模仿百度日历
  • 原文地址:https://www.cnblogs.com/1020182600HENG/p/7360817.html
Copyright © 2011-2022 走看看