• java学习笔记14动态代理


    InvocationHandler接口

    public interface InvocationHandler{
    	public Object invoke(Object proxy,Method method,Object[] args)throws Throwable
    }


    参数说明:

    Object  proxy:被代理的对象

    Method  method:要调用的方法

    Object   args[]:方法调用时所需要的参数

    Proxy类

    Proxy类是专门完成代理的操作类,可以通过此类为一个或多个接口动态地生成实现类,此类提供了如下的操作方法:

    public static Object newProxyInstance(ClassLoader loader,
    			Class<?>[] interfaces,
    			InvocationHandler h)
    			throws IllegalArgumentException

    参数说明:

    ClassLoader  loader:类加载器

    Class<?>[]  interfaces:得到全部的接口

    InvocationHandler  h:得到InvocationHandler接口的子类实例

     

    动态代理:

    package com.itmyhome;
    
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    
    interface IHello{    //定义接口
    	public void sayHello();
    }
    class HelloImpl implements IHello{
    
    	@Override
    	public void sayHello() {
    		// TODO Auto-generated method stub
    		System.out.println("hello itmyhome");
    	}
    }
    class MyInvocationHandler implements InvocationHandler{
    
    	private Object obj;   //真实主题类
    	public Object bind(Object obj){
    		this.obj = obj;
    		return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);
    	}
    	@Override
    	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    		System.out.println("***before***");
    		Object temp = method.invoke(obj, args);
    		System.out.println("***after***");
    		return temp;
    	}
    }
    
    public class T {
    	public static void main(String[] args) throws Exception{
    		IHello h = (IHello)new MyInvocationHandler().bind(new HelloImpl());
    		h.sayHello();
    	}
    }
    


     

  • 相关阅读:
    SpringMVC请求静态资源
    Spring视图和视图解析器
    @ModelAttribute运行流程
    SpringMVC模型数据处理
    SpringMVC简单映射请求参数介绍
    队列和栈的问题
    非比较排序——计数排序、基数排序、桶排序
    递归
    对数器的使用
    常见的比较排序
  • 原文地址:https://www.cnblogs.com/itmyhome/p/4131447.html
Copyright © 2020-2023  润新知