`
wx1568444409
  • 浏览: 14625 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

反射与代理

 
阅读更多

ClassLoadTest .java

package ZHANG.Proxy;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.Collection;

public class ClassLoadTest {

	/**
	 * @param args
	 * @throws NoSuchMethodException 
	 * @throws SecurityException 
	 * @throws InvocationTargetException 
	 * @throws IllegalAccessException 
	 * @throws InstantiationException 
	 * @throws IllegalArgumentException 
	 */
	public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException {
		Class clazz = Proxy.getProxyClass(Collection.class.getClassLoader(),Collection.class);
		System.out.println(clazz.getName());
		
		Constructor[] constructors = clazz.getConstructors();
		for(Constructor constructor : constructors){
			String name = constructor.getName();
			StringBuilder sb = new StringBuilder(name);
			sb.append('(');
				Class[] classparams = constructor.getParameterTypes();
				for(Class classparam : classparams){
					sb.append(classparam.getName()).append(',');
				}
				if(constructors!=null && classparams.length!=-1)
					sb.deleteCharAt(sb.length()-1);
			sb.append(')');
			System.out.println(name);
		}
		System.out.println("------------------------method list");
		Method[] Methods = clazz.getMethods();
		for(Method constructor : Methods){
			String name = constructor.getName();
			StringBuilder sb = new StringBuilder(name);
			sb.append('(');
				Class[] classparams = constructor.getParameterTypes();
				for(Class classparam : classparams){
					sb.append(classparam.getName()).append(',');
				}
				if(constructors!=null && classparams.length!=-1)
					sb.deleteCharAt(sb.length()-1);
			sb.append(')');
			System.out.println(name);
		}
		//第一种方式
		Constructor constructor = clazz.getConstructor(InvocationHandler.class);
		class MyInvocationHandler implements InvocationHandler{

			public Object invoke(Object proxy, Method method, Object[] args)
					throws Throwable {
				// TODO Auto-generated method stub
				return null;
			}
		}
		Collection proxy1 = (Collection) constructor.newInstance(new MyInvocationHandler());
		System.out.println(proxy1.toString());
		proxy1.clear();
		//proxy1.size();
		//第二种
		Collection proxy2 = (Collection)constructor.newInstance(new InvocationHandler(){
			public Object invoke(Object proxy, Method method, Object[] args)
					throws Throwable {
				// TODO Auto-generated method stub
				return null;
			}
		});
		
		//第三种 proxy与实例对象合二为一
		Collection proxy3 = (Collection) Proxy.newProxyInstance(Collection.class.getClassLoader(), 
				new Class[]{Collection.class}, 
				new InvocationHandler(){
					ArrayList target = new ArrayList();//放在Invoke里每次调用会返回0,放外面是成员变量了
					public Object invoke(Object proxy, Method method,
							Object[] args) throws Throwable {
						long begintime = System.currentTimeMillis();
						Object retVal = method.invoke(target, args);
						long endtime = System.currentTimeMillis();
						System.out.println("runnig time = "+(begintime-endtime));
						return retVal;
					}
		});
		proxy3.add("xyz");
		proxy3.add("yuws");
		proxy3.add("haha");
		System.out.println(proxy3.size());
	}

}

转载于:https://my.oschina.net/u/175434/blog/699981

分享到:
评论

相关推荐

    JAVA反射与代理

    在"JAVA反射与代理"这个主题中,我们将深入探讨这两个核心概念。 首先,让我们了解反射的基本用法。当一个类的名称在运行时才被知道,反射可以帮助我们动态地创建对象。例如,我们可以使用`Class.forName()`方法...

    java反射与代理实现AOP

    ### Java反射与代理实现AOP #### 一、AOP概念及应用场景 AOP(Aspect-Oriented Programming,面向切面编程)是一种编程思想和技术,主要用于处理横切关注点问题,比如日志记录、性能统计、安全控制、事务处理、...

    利用Java的反射与代理实现AOP.pdf

    利用 Java 的反射与代理实现 AOP AOP(Aspect Oriented Programming),即面向切面编程,是一种新的编程思想,它主要用于日志记录、性能统计、安全控制、事务处理、异常处理等方面。其主要意图是将日志记录、性能...

    Java编程思想第十四章类型信息之反射与代理.pptx

    Java编程思想第十四章类型信息之反射与代理.pptx

    利用Java的反射与代理实现IOC模式

    Java的反射和代理机制是两种强大的工具,它们在实现控制反转(Inversion of Control,简称IOC)模式中扮演着重要角色。IOC模式是一种设计模式,它将对象的创建和依赖关系的管理从代码中分离出来,使系统更加灵活、可...

    利用Java的反射与代理实现AOP.docx

    总结来说,通过Java的反射和动态代理,我们可以轻松地实现AOP,将日志记录等横切关注点与业务逻辑解耦。这种设计模式在大型复杂应用中尤为有用,因为它允许我们以灵活的方式管理横切关注点,而无需修改大量业务代码...

    代理与反射

    `JAVA反射与代理.ppt`可能包含对这两个主题的深入讲解,包括理论知识、代码示例和实际应用场景。学习这个PPT可以帮助你更好地理解代理和反射在实际项目中的运用,例如AOP(面向切面编程)、动态数据绑定、插件机制、...

    JVM技术,反射与动态代理

    本主题将深入探讨JVM技术,特别是反射与动态代理这两个关键特性。 一、JVM技术 1. 类加载机制:JVM通过类加载器(ClassLoader)来加载.class文件,分为启动类加载器、扩展类加载器和应用程序类加载器。类的加载...

    BravedBoy#YCBlogs#16.反射与代理1

    1.技术博客汇总 2.开源项目汇总 3.生活博客汇总 4.喜马拉雅音频汇总 5.其他汇总

    Java反射与动态代理

    Java反射是Java编程语言中的一个强大特性,...但需要注意的是,过度使用反射和动态代理可能会带来性能损失,因为它们都需要在运行时解析类信息,增加了额外的开销。因此,在实际开发中应适度使用,以平衡功能性和性能。

    JAVA的反射机制与动态代理

    Java的反射机制与动态代理是Java编程中两个非常重要的高级特性,它们在许多实际场景中发挥着关键作用,如框架开发、插件系统、元数据处理等。下面将详细讲解这两个概念及其应用。 首先,Java的反射机制允许我们在...

    java反射与动态代理笔记

    Java反射和动态代理是Java编程中的重要特性,它们在实现高度灵活和动态的代码执行方面发挥着关键作用。本文将深入探讨这两个概念及其在实际开发中的应用。 **Java反射** Java反射API允许程序在运行时检查类、接口...

    5分钟快速看懂ES6中的反射与代理

    主要给大家介绍了如何通过5分钟快速看懂ES6中的反射与代理的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用ES6具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

    AOP动态代理(反射机制)

    3. **反射机制**:在AOP动态代理中,反射机制扮演着重要角色。通过反射,我们可以动态获取类的信息,包括类的字段、方法等,并能够在运行时动态地调用方法。在创建代理对象和处理方法调用时,都会用到反射。 4. **...

    反射实现aop 动态代理

    Java 反射实现的 AOP(面向切面编程)动态代理模式是 Spring 框架中 AOP 实现的核心机制之一。AOP 是一种编程范式,它关注于程序执行过程中的“切面”,即跨越多个对象的行为或关注点,如日志、事务管理等。在传统的...

Global site tag (gtag.js) - Google Analytics