`
kinglun
  • 浏览: 40933 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

dynamic proxy

阅读更多
package dynamicProxy;

public interface Man
{
public void say();
public void work();
}



package dynamicProxy;

public class ManOne implements Man
{

public void say()
{
System.out.println("今天星期二,好心情!");
}
public void work()
{
System.out.println("今天星期二,好好工作!");
}

}


package dynamicProxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class ManProxy implements InvocationHandler {

private Object target;
public ManProxy(Object obj)
{
this.target = obj;
}

public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object result;
System.out.println("***********代理开始*************");
System.out.println(proxy.getClass().getSimpleName());
System.out.println(method.getName());
result = method.invoke(target, args);
return result;
}

}


package dynamicProxy;

import java.lang.reflect.Proxy;

public class Test
{
public static void main(String[] args)
{
ManProxy proxy = new ManProxy(new ManOne());
Man man = (Man)Proxy.newProxyInstance(ManOne.class.getClassLoader(), ManOne.class.getInterfaces(), proxy);
man.say();
man.work();
}

}
/**
*动态代理就是在运行时才知道你要调用的是哪个类,哪个方法,必须实现InvocationHandler接口,且重写invoke方法,
*里面主要是写要代理的哪个类,和一些相关的操作。
*而且每次调用的调用方法的时候,都会去调用ManProxy中的invoke方法。
*代理主要就是代理一个类中的方法,需要哪个方法就可以动态的调用这个方法。
*
*日志管理中可以用
*/
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics