Java 基础【18】 反射与内省
2018-12-09 11:19:14来源:博客园 阅读 ()
1.反射和内省的概念定义
Java 反射机制容许程序在运行时加载、探知、使用编译期间完全未知的 class,核心类 java.lang.Class。
通过把指定的类中各种元素成分都映射成 java.lang.reflect 反射包中的相应类,使得我们可以动态的调用类的相应成员.比如构造方法、成员方法、成员变量等。
Java 内省(IntroSpector)是对 Bean 类属性、事件的一种缺省处理方法,核心类 java.beans.Introspector。
通过 java.beans 包下一套 API 来访问 javaBean 的getter/setter方法。
//JDK 反射API public static Class<?> forName(String className) //通过配置灵活加载不同数据库驱动 Class.forName(driver);
运行时获取任意类的成员方法:
Class<String> stringClass = String.class; //获取声明的所有方法(不包括继承方法) Method[] methods = stringClass.getDeclaredMethods(); //获取所有方法 Method[] methods1 = stringClass.getMethods(); //获取特定方法 Method indexOf = stringClass.getMethod("indexOf", int.class);
运行时获取任意类的成员变量:
//获取所有类属性 Field[] fields = stringClass.getFields(); //获取声明的所有成员属性(不包括继承属性) Field[] declaredFields = stringClass.getDeclaredFields(); //获取特定字段 Field hashField = stringClass.getDeclaredField("hash");
运行时调用任意类的方法:
Constructor<String> constructor = stringClass.getConstructor(String.class); String newInstance = constructor.newInstance("orson"); Object invoke = indexOf2.invoke(newInstance, "n");
在运行时实例化对象并访问对应字段比直接 new 一个对象来操作到底有什么好处呢?
最主要的是提高灵活性和可扩展性, Spring 托管类、Struts 请求映射 Action、Hibernate 填充实体属性这些过程,反编译源码你都会看到反射。
通过修改配置文件类文件的“描述”,不需要修改代码和编译,进行动态有必要的加载。
很多开源项目都对 JDK 底层反射进行了封装,提供了简洁的 API 接口方便使用,如 apache-common、hutool等,这里就不赘述了。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:java 代码说明制作讲解
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash