`

java-InvocationHandler 动态代理

阅读更多
以例子来说明动态代理:

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));
	}
}
0
1
分享到:
评论

相关推荐

    Java动态代理实现 Proxy InvocationHandler

    JAVA动态代理,采用Proxy与InvocationHandler实现。

    java动态代理和反射

    java动态代理 public class HireProxy implements InvocationHandler { //被代理的真实角色 private Object obj; public HireProxy(Object obj) { super(); this.obj = obj; } //第二个参数method,被...

    java静态代理和动态代理详解

    Java中提供了一个java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口来实现动态代理。代理类在运行时会根据被代理接口自动生成,并且可以通过InvocationHandler接口对方法进行增强。

    java动态代理(2)

    Java动态代理类位于Java.lang.reflect包下,一般主要涉及到以下两个类: (1) Interface InvocationHandler (2) Proxy:该类即为动态代理类,

    java动态代理(3)

    Java动态代理类位于Java.lang.reflect包下,一般主要涉及到以下两个类: (1) Interface InvocationHandler (2) Proxy:该类即为动态代理类,

    java实现Proxy例子

    我自己用eclipse写的java代码,可以直接用eclipse导入,也可以直接用java -jar proxy_sample.jar执行 代码量很小,尽量通过注释进行说明 本例实现了InvocationHandler接口,代码具有典型性 在研究代理模式(Proxy...

    Java SSM框架集成的日志功能增强Demo源码

    项目名称:Java SSM框架集成日志功能增强Demo 主要编程语言:Java ...项目利用Java动态代理机制,通过实现InvocationHandler接口,巧妙地运用AOP(面向切面编程)实现了日志功能,增强了应用的可追踪性与维护性。

    java动态代理1

    因为动态代理的过程中,我们并没有实际看到代理类,也没有很清晰地的看到代理类的具体样子,而且动态代理中被代理对象和代理对象是通过InvocationHandler

    Java动态代理1

    动态代理的实现:一:简单的动态代理实现:(1) 实现InvocationHandler接口(2) Proxy.newInstance()创建代理例:二:实际案

    Java的动态代理机制详解

     在java的动态代理机制中,有两个重要的类或接口,一个是 InvocationHandler(Interface)、另一个则是 Proxy(Class),这一个类和接口是实现我们动态代理所必须用到的。首先我们先来看看java的API帮助文档是怎么样对...

    JDK动态代理+JDK动态代理完整代码+JDK动态代理代码实现逻辑

    动态代理::在程序运行时,运用反射机制动态创建而成。 动态代理类的字节码在程序运行时由Java反射机制动态生成,无需程序员...java.lang.reflect 包中的Proxy类和InvocationHandler接口提供了生成动态代理类的能力。

    使用Java动态代理实现一个简单的网络请求拦截器.txt

    这个代码实现了一个简单的网络请求拦截器,使用了Java的动态代理机制。在这个例子中,我们创建了一个`HttpRequestInterceptor`类来实现`InvocationHandler`接口,并在`invoke()`方法中实现了对目标方法的拦截操作。...

    java动态代理(1)

    Java动态代理类位于Java.lang.reflect包下,一般主要涉及到以下两个类 (1)Interface InvocationHandler(2)Proxy

    JAVA设计模式(动态代理)

    当系统有了一个代理对象后,对源对象的方法调用会首先被分派给一个调用处理器(InvocationHandler)//接口InvocationHandler接口中有一个invoke()方法 程序可以在调用处理器的invoke方法中截获这个调用,进行额外...

    Java动态代理简单应用

    在动态代理上所做的所有调用都会被重定向到单一的调用处理器(InvocationHandler)上,调用处理器的工作是揭示调用的类型并确定相应的策略。  Java动态代理实现机制采用了反射的思想,有关于反射的基础知识,可以...

    Java中的动态代理模式

    在hadoop中,DataNode和NameNode之间的控制信息的交流是通过RPC机制完成的,采用的是动态代理和java NIO的方式。DataNode端是通过获得NameNode的代理,通过该代理和NameNode进行通信的,为了更好的分析hadoop的RPC...

    Java面向对象系列[v1.0.0][使用反射生成动态代理]

    在Java的java.lang.reflect包里有个Proxy类和一个InvocationHandler接口,通过使用他们可以生成JDK动态代理类或动态代理对象 使用Proxy和InvocationHandler创建动态代理 Proxy提供了用于创建动态代理类和代理对象的...

    AOP的实现机制

    Java在JDK1.3后引入的动态代理机制,使我们可以在运行期动态的创建代理类。使用动态代理实现AOP需要有四个角色:被代理的类,被代理类的接口,织入器,和InvocationHandler,而织入器使用接口反射机制生成一个代理类...

    JavaEE求职简历-姓名-JAVA开发工程师-范文.doc

    3年JAVA开发经验,有多个项目开发经验,可独立开发; ...熟练掌握Spring IOC、AOP 的使用和实现原理,掌握java内部面向接口,实现InvocationHandler的动态代理,和Cglib面向父类,实现MethodIn

    JDK的动态代理(powernode 文档)(源代码)

    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 修改...

Global site tag (gtag.js) - Google Analytics