文档章节

反射与代理

旺少
 旺少
发布于 2016/06/23 16:40
字数 294
阅读 3
收藏 0

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());
	}

}

本文转载自:http://blog.csdn.net/anskya520/article/details/6218597

旺少
粉丝 0
博文 20
码字总数 0
作品 0
株洲
私信 提问
Java基础之反射

image 前言 所谓工欲善其事必先利其器,只有把脚下的每一步走好,才能走的更远,只有把地基打的牢固,才能盖的更高。今天我来给大家讲讲java中的反射,如有错误请指出。 概述 反射(Reflect...

努力的右先生
2017/11/07
0
0
反射实现动态代理原理

我记得在spring中有用到在xml文件中配置一些类和方法,然后在实际调用这些类的方法的时候依照配置文件的信息,在运行这些方法的同时(前、后)。同时调用一些已经配置好的方法(比如说日志记录...

marjey
2016/10/24
67
0
知识总结之 插件化基础 java反射与代理

Java平台的反射机制是代码动态加载和调用的基本途径,在安卓系统源码中也用到了大量的反射动态加载类。反射也是安卓平台插件化实现的必要掌握的基础知识。代理是客户端灵活操作对象,间接的低...

CankingApp
2017/05/10
0
0
Java反射机制

1.反射机制是什么 Reflection(反射)是被视为动态语言的关键,反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法...

ciyo_yang
2017/06/26
0
0
Java核心-反射和动态代理(JDK Proxy和Cglib)

反射和动态代理放有一定的相关性,但单纯的说动态代理是由反射机制实现的,其实是不够全面不准确的,动态代理是一种功能行为,而它的实现方法有很多。要怎么理解以上这句话,请看下文。 一、...

小刀爱编程
2018/11/27
29
0

没有更多内容

加载失败,请刷新页面

加载更多

PyTorch入门笔记一

张量 引入pytorch,生成一个随机的5x3张量 >>> from __future__ import print_function>>> import torch>>> x = torch.rand(5, 3)>>> print(x)tensor([[0.5555, 0.7301, 0.5655],......

仪山湖
36分钟前
5
0
OSChina 周二乱弹 —— 开发语言和语言开发的能一样么

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @花间小酌:#今日歌曲推荐# 分享The Score的单曲《Revolution》 《Revolution》- The Score 手机党少年们想听歌,请使劲儿戳(这里) @批判派...

小小编辑
今天
2.2K
17
oracle ORA-39700: database must be opened with UPGRADE option

ORA-01092: ORACLE instance terminated. Disconnection forced ORA-00704: bootstrap process failure ORA-39700: database must be opened with UPGRADE option 进程 ID: 3650 会话 ID: 29......

Tank_shu
今天
3
0
分布式协调服务zookeeper

ps.本文为《从Paxos到Zookeeper 分布式一致性原理与实践》笔记之一 ZooKeeper ZooKeeper曾是Apache Hadoop的一个子项目,是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它...

ls_cherish
今天
4
0
聊聊DubboDefaultPropertiesEnvironmentPostProcessor

序 本文主要研究一下DubboDefaultPropertiesEnvironmentPostProcessor DubboDefaultPropertiesEnvironmentPostProcessor dubbo-spring-boot-project-2.7.3/dubbo-spring-boot-compatible/au......

go4it
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部