java 动态代理范例 InvocationHandler与Proxy
2016-08-12 11:45
387 查看
java 动态代理范例 InvocationHandler与Proxy,拦截与代理
java.lang.reflect.Proxy,Proxy 提供用于创建动态代理类和实例的静态方法.
newProxyInstance()
返回一个指定接口的代理类实例,该接口可以将方法调用指派到指定的调用处理程序
(详见api文档)
java.lang.reflect.InvocationHandler,
InvocationHandler 是代理实例的调用处理程序 实现的接口。
invoke()
在代理实例上处理方法调用并返回结果。在与方法关联的代理实例上调用方法时,将在调用处理程序上
调用此方法。
JDK1.2以后提供了动态代理的支持,程序员通过实现java.lang.reflect.InvocationHandler接口提供一个拦截处理器,然后通过java.lang.reflect.Proxy得到一个代理对象,通过这个代理对象来执行商业方法,在商业方法被调用的同时,执行处理器会被自动调用。
Java动态代理只能对实现了接口的类生成代理,不能针对类。其实现主要是通过java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口。Proxy类主要用来获取动态代理对象,InvocationHandler接口用来约束调用者实现。
接口类源代码:
Java代码public interface HelloWorld {
public void sayHelloWorld();
}
实现类源代码:
Java代码public class HelloWorldImpl implements HelloWorld {
public void sayHelloWorld() {
System.out.println("Hello World!");
}
}
拦截器源代码:
Java代码public class HelloWorldHandler implements InvocationHandler {
//目标对象
private Object targetObject;
public HelloWorldHandler(Object targetObject){
this.targetObject = targetObject;
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("方法调用前。。。");
Object result = method.invoke(this.targetObject, args);
System.out.println("方法调用结束");
return result;
}
}
测试代码:
Java代码public class HelloWorldTest {
public static void main(String[] args) {
//业务对象
HelloWorld obj = new HelloWorldImpl();
//拦截器对象
HelloWorldHandler handler = new HelloWorldHandler(obj);
//返回业务对象的代理对象
HelloWorld proxy = (HelloWorld)Proxy.newProxyInstance(
obj.getClass().getClassLoader(),
obj.getClass().getInterfaces(),
handler);
//通过代理对象执行业务对象的方法
proxy.sayHelloWorld();
}
}
测试结果:
Html代码方法调用前。。。
Hello World!
方法调用结束
来自为知笔记(Wiz)
相关文章推荐
- java 动态代理范例 InvocationHandler与Proxy,拦截与代理
- java 动态代理范例 InvocationHandler与Proxy
- java 动态代理范例 InvocationHandler与Proxy
- 如何使用Proxy模式及Java内建的动态代理机制
- java 动态代理深度学习(Proxy,InvocationHandler),含$Proxy0源码
- java动态代理范例
- Java动态代理借助Proxy与InvocationHandler实现
- Proxy模式及Java内建的动态代理机制
- Java Proxy动态代理
- Java 动态代理(Proxy)
- 关于java中jdk中接口动态代理模式Proxy的剖析
- java动态代理原理(Proxy,InvocationHandler),含$Proxy0源码
- 使用JAVA中的动态代理实现数据库连接池(载自:http://www.ibm.com/developerworks/cn/java/l-connpoolproxy/)
- Java动态代理一——动态类Proxy的使用
- java 动态代理深度学习(Proxy,InvocationHandler),含$Proxy0源码
- 如何使用Proxy模式及Java内建的动态代理机制 推荐
- java 动态代理学习(Proxy,InvocationHandler)——自己的理解
- java 动态代理深度学习(Proxy,InvocationHandler),含$Proxy0源码
- 使用java.lang.reflect.Proxy和InvocationHandler创建动态代理(仅代理接口)
- 转载:java 动态代理学习(Proxy,InvocationHandler)