您的位置:首页 > 编程语言 > Java开发

java学习笔记14--动态代理

2015-09-08 02:15 447 查看

java学习笔记14--动态代理

InvocationHandler接口

[java] view plaincopy

public interface InvocationHandler{

public Object invoke(Object proxy,Method method,Object[] args)throws Throwable

}

参数说明:

Object proxy:被代理的对象

Method method:要调用的方法

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

Proxy类

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

[java] view plaincopy

public static Object newProxyInstance(ClassLoader loader,

Class<?>[] interfaces,

InvocationHandler h)

throws IllegalArgumentException

参数说明:

ClassLoader loader:类加载器

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

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

动态代理:

[java] view plaincopy

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

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: