以例子来说明动态代理:
package com.gym;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
interface A {
public void a(int a);
}
interface B {
public void b(int b);
}
class BImpl implements InvocationHandler {
private A a = new A() {
public void a(int a) {
System.out.println("-----a------" + a);
}
public String toString() {
return "A";
};
};
private B b = new B() {
public void b(int b) {
System.out.println("-----b------" + b);
}
public String toString() {
return "B";
};
};
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
if (method.getName().equals("a")) {
method.invoke(a, args);
} else if (method.getName().equals("b")) {
method.invoke(b, args);
}
/*if (method.getName().equals("toString")) {
return "*********toString*************";
}*/
System.out.println(proxy instanceof A);
System.out.println(proxy instanceof B);
//System.out.println(proxy); //此处会死循环 (1)
return null;
}
@Override
public String toString() {
return "SSSSSSSSSSSS";
}
}
/**
*
* @author xinchun.wang
*
* Object obj = Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(),
new Class[] { A.class, B.class },new BImpl());
* 注意:
* obj 和 BImpl 实例之间的关系:首先obj 拥有BImpl,
* obj 和 A,B 实例之间的关系:obj 是A也是B,一个动态的代理实现
* 对比(1) (2) obj 的 toString方法 和 proxy 的关系
*/
public class JDKProxy {
public static void main(String[] args) {
Object obj = Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(),
new Class[] { A.class, B.class },new BImpl());
A a = (A) obj;
a.a(1);
System.out.println(a);
B b = (B) obj;
b.b(10);
System.out.println(obj); //(2)
System.out.println(Proxy.getInvocationHandler(obj));
}
}
分享到:
相关推荐
JAVA动态代理,采用Proxy与InvocationHandler实现。
java动态代理 public class HireProxy implements InvocationHandler { //被代理的真实角色 private Object obj; public HireProxy(Object obj) { super(); this.obj = obj; } //第二个参数method,被...
Java中提供了一个java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口来实现动态代理。代理类在运行时会根据被代理接口自动生成,并且可以通过InvocationHandler接口对方法进行增强。
Java动态代理类位于Java.lang.reflect包下,一般主要涉及到以下两个类: (1) Interface InvocationHandler (2) Proxy:该类即为动态代理类,
Java动态代理类位于Java.lang.reflect包下,一般主要涉及到以下两个类: (1) Interface InvocationHandler (2) Proxy:该类即为动态代理类,
我自己用eclipse写的java代码,可以直接用eclipse导入,也可以直接用java -jar proxy_sample.jar执行 代码量很小,尽量通过注释进行说明 本例实现了InvocationHandler接口,代码具有典型性 在研究代理模式(Proxy...
项目名称:Java SSM框架集成日志功能增强Demo 主要编程语言:Java ...项目利用Java动态代理机制,通过实现InvocationHandler接口,巧妙地运用AOP(面向切面编程)实现了日志功能,增强了应用的可追踪性与维护性。
因为动态代理的过程中,我们并没有实际看到代理类,也没有很清晰地的看到代理类的具体样子,而且动态代理中被代理对象和代理对象是通过InvocationHandler
动态代理的实现:一:简单的动态代理实现:(1) 实现InvocationHandler接口(2) Proxy.newInstance()创建代理例:二:实际案
在java的动态代理机制中,有两个重要的类或接口,一个是 InvocationHandler(Interface)、另一个则是 Proxy(Class),这一个类和接口是实现我们动态代理所必须用到的。首先我们先来看看java的API帮助文档是怎么样对...
动态代理::在程序运行时,运用反射机制动态创建而成。 动态代理类的字节码在程序运行时由Java反射机制动态生成,无需程序员...java.lang.reflect 包中的Proxy类和InvocationHandler接口提供了生成动态代理类的能力。
这个代码实现了一个简单的网络请求拦截器,使用了Java的动态代理机制。在这个例子中,我们创建了一个`HttpRequestInterceptor`类来实现`InvocationHandler`接口,并在`invoke()`方法中实现了对目标方法的拦截操作。...
Java动态代理类位于Java.lang.reflect包下,一般主要涉及到以下两个类 (1)Interface InvocationHandler(2)Proxy
当系统有了一个代理对象后,对源对象的方法调用会首先被分派给一个调用处理器(InvocationHandler)//接口InvocationHandler接口中有一个invoke()方法 程序可以在调用处理器的invoke方法中截获这个调用,进行额外...
在动态代理上所做的所有调用都会被重定向到单一的调用处理器(InvocationHandler)上,调用处理器的工作是揭示调用的类型并确定相应的策略。 Java动态代理实现机制采用了反射的思想,有关于反射的基础知识,可以...
在hadoop中,DataNode和NameNode之间的控制信息的交流是通过RPC机制完成的,采用的是动态代理和java NIO的方式。DataNode端是通过获得NameNode的代理,通过该代理和NameNode进行通信的,为了更好的分析hadoop的RPC...
在Java的java.lang.reflect包里有个Proxy类和一个InvocationHandler接口,通过使用他们可以生成JDK动态代理类或动态代理对象 使用Proxy和InvocationHandler创建动态代理 Proxy提供了用于创建动态代理类和代理对象的...
Java在JDK1.3后引入的动态代理机制,使我们可以在运行期动态的创建代理类。使用动态代理实现AOP需要有四个角色:被代理的类,被代理类的接口,织入器,和InvocationHandler,而织入器使用接口反射机制生成一个代理类...
3年JAVA开发经验,有多个项目开发经验,可独立开发; ...熟练掌握Spring IOC、AOP 的使用和实现原理,掌握java内部面向接口,实现InvocationHandler的动态代理,和Cglib面向父类,实现MethodIn
JDK的动态代理(powernode 文档)(源代码) JDK的动态代理(powernode 文档) 一、动态代理 1.1JDK动态代理 1.1.1 proxy 1.1.2 InvocationHandler 1.1.3 创建一个Maven项目 1.1.4 导入Spring的相关依赖 1.1.5 修改...