常用反射方法:

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:反射的常用用法,相关推荐

  1. java reflections_关于java:java反射工具Reflections用法

    java反射工具Reflections用法 一.引入maven依赖 org.reflections reflections 0.9.10 二.用法示例: reflections 中蕴含很多的Scann ...

  2. java反射之Field用法(获取对象的字段名和属性值)

    一.概述 Field是一个类,位于java.lang.reflect包下.在Java反射中Field类描述的是类的属性信息,功能包括: 获取当前对象的成员变量的类型 对成员变量重新设值 二.如何获取F ...

  3. 我摊牌了,我不装了,这些 Java 反射用法总结都告诉你们

    Java反射的常见用法 反射的常见用法有三类,第一类是"查看",比如输入某个类的属性方法等信息,第二类是"装载",比如装载指定的类到内存里,第三类是" ...

  4. java reflections_java反射工具Reflections用法

    java反射工具Reflections用法 一.引入maven依赖 org.reflections reflections 0.9.10 二.用法示例: reflections 中包含很多的Scann ...

  5. java反射快速入门(二)

    上一遍博文 , 简单介绍java 反射的常用接口,本遍博文, 我会结合项目开发的实际例子讲解下 java反射的使用 现在有个需求, 要将一个对象转换成xml格式, 或者将一串xml转换一个对象, 这时 ...

  6. java反射用法示例_Java包| 类型,用法,示例

    java反射用法示例 配套 (Packages) Packages in Java is simply a mechanism to encapsulate (i.e. to put in a sho ...

  7. java反射用法示例_Java反射示例教程

    java反射用法示例 Java Reflection provides ability to inspect and modify the runtime behavior of applicatio ...

  8. java反射field_java反射field用法

    我们在前面的文章中学习了java反射机制是什么的问题,相信大家对反射机制有了全面的理解.在java中使用反射机制,会提高程序的灵活性和扩展性,还能节省资源,因此在java编程中使用好反射是重要的.今天 ...

  9. Struts2中action接收参数的三种方法及ModelDriven跟Preparable接口结合JAVA反射机制的灵活用法...

    Struts2中action接收参数的三种方法及ModelDriven跟Preparable接口结合JAVA反射机制的灵活用法 www.MyException.Cn   发布于:2012-09-15 ...

最新文章

  1. Python_面向对象_类1
  2. 百度地图android wear,Android SDK | 百度地图API SDK
  3. 【图像超分辨率论文】BasicVSR: The Search for Essential Components in Video Super-Resolution and Beyond
  4. PE文件RV转FOA及FOA转RVA
  5. java 字符串 日期格式化_Java8常用日期格式化字符串日期相互转换
  6. 安卓iccid_Android 获取双卡手机IMEI,IMSI,ICCID
  7. mysql/mariadb 安装开启spinx引擎
  8. python车牌识别_python+opencv实现车牌识别
  9. 36款免费可商用字体 附字体分享链接
  10. N81新手入门全攻略——N81常规设置问答篇
  11. 51c语言单片机io口控制实验报告,单片机实验报告二 单片机IO口实验
  12. sonarqube增加阿里p3c规则扫描
  13. 入门OSPF就这一篇足够了
  14. 小米怎么解锁,有什么相关教程
  15. Xtrabackup 安装以及 mysql 使用 Xtrabackup 物理备份过程记录
  16. 解决UE4打包Android报错app:packageDebug FAILED的一个土方法
  17. 3. 剪辑入门--电影混剪 (1)
  18. Linux系统中常用命令行命令、快捷键、创建长路径的快捷键
  19. Python之建模规划篇--线性规划
  20. 最新WIN10系统封装教程2019系列(五)——使用工具优化与清理

热门文章

  1. 好好说话之Tcache Attack(1):tcache基础与tcache poisoning
  2. 教程篇(7.0) 09. FortiGate安全 应用控制 ❀ Fortinet 网络安全专家 NSE 4
  3. 表格进阶03——简历制作(用表格布局)
  4. CCID 设备通讯 (Windows 平台)
  5. Python实现一键生成微信好友头像墙
  6. Excel的常用快捷键
  7. 两数互素有什么性质_如何定义两个数互素的程度?
  8. A Multi-task Learning Framework for Opinion Triplet Extraction (EMNLP 2020)阅读记录
  9. 【数据结构】图—弗洛伊德(Floyd)算法
  10. H.264中SPS、PPS和IDR