Java:反射的常用用法,
常用反射方法:
package reflection;import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.URL;public class testReflection {public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {String str="reflection.T";//获取类Class c=Class.forName(str);//获取类路径URL z=c.getResource("");URL s=c.getClassLoader().getResource("");//得到class在类中的地址ClassLoader d=c.getClassLoader();//得到class,c所实现的接口Class[] f=c.getInterfaces()[0];Class[] f=c.getInterfaces();System.out.println(z);System.out.println(s);System.out.println(d);System.out.println(f);//getClassLoader().getResource(fileName)//用获取到的类new一个新的对象Object o=c.newInstance();//接收该对象中所有的方法Method[] method = c.getMethods();System.out.println("此元素上的注释:"+c.getDeclaredAnnotations());for(Method m:method) {if(m.getName().equals("m")) {//方法选择第一个参数传递对象,后面的参数传递方法参数 m.invoke(o);System.out.println("哈希码:"+m.hashCode());}if(m.getName().equals("b")) {m.invoke(o,1,2);//得到参数类型for(Class paramtype : m.getParameterTypes()) {System.out.println("参数类型:"+paramtype.getName());}}}}} /*//instanceof方法测试args返回的是否是一个class实例 if(args[0] instanceof String)* @param args* */ class T {public T(){System.out.println("构造函数被调用了");}public void m() {System.out.println("m函数被调用了");}public void b(int i,int j) {System.out.println("b函数的结果:"+i+j);} }
一,利用反射自动为javabeen赋值
例 been:
package proxy;public class Notice{String type;String name;String data;String address;String vill;String upFile;String num;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getData() {return data;}public void setData(String data) {this.data = data;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getVill() {return vill;}public void setVill(String vill) {this.vill = vill;}public String getUpFile() {return upFile;}public void setUpFile(String upFile) {this.upFile = upFile;}public String getNum() {return num;}public void setNum(String num) {this.num = num;}public String getType() {return type;}public void setType(String type) {this.type = type;} }
插入数据类:
package cn.test;import java.lang.reflect.Field; import java.util.HashMap;public class ReflectDemo {static HashMap<String,String> data;static{data=new HashMap<String,String>();data.put("name","拟征收土地公告");data.put("type","测试公告");data.put("data","2017-01-12");data.put("address","成都市青羊区");data.put("vill","二道街");data.put("upFile","文件具体的内容");data.put("num","文号:国:001");data.put("type","测试公告");}public static void main(String[] args)throws Exception {Notice obj=new Notice();test2(obj,data);System.out.println(obj.getAddress());}public static void test2(Notice obj,HashMap<String,String> data) throws Exception {Class cls=obj.getClass();//getDeclaredFields():获得某个类的所有声明的字段Field[] fields = cls.getDeclaredFields();for(Field field : fields){String item=data.get(field.getName());field.set(obj,item);}}}
二,动态代理
通过类实现InvocationHandler接口重写invoke方法实现
可在需要调用的方法前面首先调用其他方法,做到权限控制
实现类:
package proxy;import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy;public class myProxyDemo implements InvocationHandler{Object aa;public Object newProxy(Object aa) {this.aa=aa; //返回一个指定接口的代理类实例(获取类加载地址,获取类实现的接口)return Proxy.newProxyInstance(aa.getClass().getClassLoader(),aa.getClass().getInterfaces(), this);}int count;public int count() {return count;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {befor(method,args); //调用此实例Object ad = method.invoke(this.aa,args);return null;} //可通过重写此方法完成不同功能public void befor(Method method, Object[] args){System.out.println("----------");}}
测试类:
public class TestProxy {//UserManager一个普通的javabeenpublic static void main(String[] args) {myProxyDemo handler=new myProxyDemo ();UserManager userManager=(UserManager) handler.newProxy(new UserManagerImpl());userManager.addUser("ad", "da");} }
转载于:https://www.cnblogs.com/dybe/p/8343838.html
Java:反射的常用用法,相关推荐
- java reflections_关于java:java反射工具Reflections用法
java反射工具Reflections用法 一.引入maven依赖 org.reflections reflections 0.9.10 二.用法示例: reflections 中蕴含很多的Scann ...
- java反射之Field用法(获取对象的字段名和属性值)
一.概述 Field是一个类,位于java.lang.reflect包下.在Java反射中Field类描述的是类的属性信息,功能包括: 获取当前对象的成员变量的类型 对成员变量重新设值 二.如何获取F ...
- 我摊牌了,我不装了,这些 Java 反射用法总结都告诉你们
Java反射的常见用法 反射的常见用法有三类,第一类是"查看",比如输入某个类的属性方法等信息,第二类是"装载",比如装载指定的类到内存里,第三类是" ...
- java reflections_java反射工具Reflections用法
java反射工具Reflections用法 一.引入maven依赖 org.reflections reflections 0.9.10 二.用法示例: reflections 中包含很多的Scann ...
- java反射快速入门(二)
上一遍博文 , 简单介绍java 反射的常用接口,本遍博文, 我会结合项目开发的实际例子讲解下 java反射的使用 现在有个需求, 要将一个对象转换成xml格式, 或者将一串xml转换一个对象, 这时 ...
- java反射用法示例_Java包| 类型,用法,示例
java反射用法示例 配套 (Packages) Packages in Java is simply a mechanism to encapsulate (i.e. to put in a sho ...
- java反射用法示例_Java反射示例教程
java反射用法示例 Java Reflection provides ability to inspect and modify the runtime behavior of applicatio ...
- java反射field_java反射field用法
我们在前面的文章中学习了java反射机制是什么的问题,相信大家对反射机制有了全面的理解.在java中使用反射机制,会提高程序的灵活性和扩展性,还能节省资源,因此在java编程中使用好反射是重要的.今天 ...
- Struts2中action接收参数的三种方法及ModelDriven跟Preparable接口结合JAVA反射机制的灵活用法...
Struts2中action接收参数的三种方法及ModelDriven跟Preparable接口结合JAVA反射机制的灵活用法 www.MyException.Cn 发布于:2012-09-15 ...
最新文章
- Python_面向对象_类1
- 百度地图android wear,Android SDK | 百度地图API SDK
- 【图像超分辨率论文】BasicVSR: The Search for Essential Components in Video Super-Resolution and Beyond
- PE文件RV转FOA及FOA转RVA
- java 字符串 日期格式化_Java8常用日期格式化字符串日期相互转换
- 安卓iccid_Android 获取双卡手机IMEI,IMSI,ICCID
- mysql/mariadb 安装开启spinx引擎
- python车牌识别_python+opencv实现车牌识别
- 36款免费可商用字体 附字体分享链接
- N81新手入门全攻略——N81常规设置问答篇
- 51c语言单片机io口控制实验报告,单片机实验报告二 单片机IO口实验
- sonarqube增加阿里p3c规则扫描
- 入门OSPF就这一篇足够了
- 小米怎么解锁,有什么相关教程
- Xtrabackup 安装以及 mysql 使用 Xtrabackup 物理备份过程记录
- 解决UE4打包Android报错app:packageDebug FAILED的一个土方法
- 3. 剪辑入门--电影混剪 (1)
- Linux系统中常用命令行命令、快捷键、创建长路径的快捷键
- Python之建模规划篇--线性规划
- 最新WIN10系统封装教程2019系列(五)——使用工具优化与清理
热门文章
- 好好说话之Tcache Attack(1):tcache基础与tcache poisoning
- 教程篇(7.0) 09. FortiGate安全 应用控制 ❀ Fortinet 网络安全专家 NSE 4
- 表格进阶03——简历制作(用表格布局)
- CCID 设备通讯 (Windows 平台)
- Python实现一键生成微信好友头像墙
- Excel的常用快捷键
- 两数互素有什么性质_如何定义两个数互素的程度?
- A Multi-task Learning Framework for Opinion Triplet Extraction (EMNLP 2020)阅读记录
- 【数据结构】图—弗洛伊德(Floyd)算法
- H.264中SPS、PPS和IDR