JDK动态代理
2015-07-23 13:52
411 查看
动态代理主要用来做方法的增强,在不修改源码的情况下,在调用方法执行的前后做你想做的事情,比如添加日志记录、事务控制等。
特点:
通过实现InvocationHandler接口创建自己的调用处理器;
通过为Proxy类执行ClassLoader对象和一组interface来创建动态代理类;
通过反射机制获得动态代理类的构造函数,其唯一参数类型是调用处理器接口类型;
通过构造函数创建动态代理类实例,构造时调用处理器对象作为参数被传入;
接口和实现类:
public interface IHello {
public String sayHello(String 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()方法的前后,增加了打印输出,实现了非侵入式的设计。
特点:
通过实现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()方法的前后,增加了打印输出,实现了非侵入式的设计。
相关文章推荐
- MySQL Proxy(解决注入的另一思路)
- 动态代理的5模式使用示例和Mixin模式
- mysql proxy问题的解决方法
- java实现动态代理示例分享
- java使用动态代理来实现AOP(日志记录)的实例代码
- java利用反射实现动态代理示例
- Win2003 WinHTTP Web Proxy Auto-Discovery Service 导致的服务器重启
- Java实现动态代理
- java动态代理和cglib动态代理示例分享
- use jscript with List Proxy Server Information
- Ubuntu10下如何搭建MySQL Proxy读写分离探讨
- WinHTTP Web Proxy Auto-Discovery Service 服务处于停止状态
- 深入解析java中的静态代理与动态代理
- java代理模式与动态代理模式详解
- 代理模式之Java动态代理实现方法
- java动态代理详解
- java 静态代理 动态代理深入学习
- java jdk动态代理详解
- zabbix 分布式部署
- AOP切面编程