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


     

  • 相关阅读:
    方法
    成员变量和局部变量
    带参数的方法
    包名规范
    String
    导包
    java基础(十二章)
    java基础(十一章)
    java基础(九章)
    java基础(八章)
  • 原文地址:https://www.cnblogs.com/itmyhome/p/4131447.html
Copyright © 2011-2022 走看看