zoukankan      html  css  js  c++  java
  • 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();
    	}
    }
    


     

  • 相关阅读:
    (备忘)解决用Xftp向CentOS7 传文件速度慢的问题
    CentOS上使用ntfs-3g挂载NTFS分区
    tomcat运行一段时间出“org.apache.coyote.http11.Http11Processor.service Error parsing HTTP request header”
    JQuery EasyUI treegrid展开与折叠,以及数据加载两次的问题
    goland 激活码
    golang 之xorm
    golang 之 go module
    golang 之单元测试
    golang 之反射
    golang 之sync &并发安全锁
  • 原文地址:https://www.cnblogs.com/itmyhome/p/4131447.html
Copyright © 2011-2022 走看看