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

JDK动态代理

2015-07-23 13:52 411 查看
动态代理主要用来做方法的增强,在不修改源码的情况下,在调用方法执行的前后做你想做的事情,比如添加日志记录、事务控制等。

特点:

通过实现InvocationHandler接口创建自己的调用处理器;

通过为Proxy类执行ClassLoader对象和一组interface来创建动态代理类;

通过反射机制获得动态代理类的构造函数,其唯一参数类型是调用处理器接口类型;

通过构造函数创建动态代理类实例,构造时调用处理器对象作为参数被传入;

接口和实现类:

public interface IHello {

public String sayHello(String name);
}

public class HelloImpl implements IHello{

public String sayHello(String name){
System.out.println("--say hello to "+name);
return "hello "+name;
}
}


使用Proxy实现动态代理:
public class TestProxy {

@Test
public void testProxy(){
final IHello hello=new HelloImpl();

IHello proxyHello=(IHello) Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), new Class[] { IHello.class }, new InvocationHandler() {

@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("--before say hello.");
Object object = method.invoke(hello, args);
System.out.println("--after say hello.");
return object;
}
});

String name="jack";
String result=proxyHello.sayHello(name);
System.out.println(result);
}
}

测试运行一下:



使用动态代理类,在调用IHello接口中sayHello()方法的前后,增加了打印输出,实现了非侵入式的设计。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  动态代理 Proxy