各位志同道合的朋友们大家好,我是一个一直在一线互联网踩坑十余年的编码爱好者,现在将我们的各种经验以及架构实战分享出来,如果大家喜欢,就关注我,一起将技术学深学透,我会每一篇分享结束都会预告下一专题反射反射机制是 JAVA 语言提供的一种基础功能,赋予程序在运行时自省(introspect)的能力 。简单来说就是通过反射,可以在运行期间获取、检测和调用对象的属性和方法 。
反射的使用场景
在现实中反射的使用场景有很多,比如以下几个 。
使用场景一:编程工具 IDEA 或 Eclipse 等,在写代码时会有代码(属性或方法名)提示,就是因为使用了反射 。
使用场景二:很多知名的框架,为了让程序更优雅更简洁,也会使用到反射 。
例如,Spring 可以通过配置来加载不同的类,调用不同的方法,代码如下所示:
<bean id="person" class="com.spring.beans.Person" init-method="initPerson"></bean>
文章插图
例如,MyBatis 在 MApper 使用外部类的 Sql 构建查询时,代码如下所示:
@SelectProvider(type = PersonSql.class, method = "getListSql")List<Person> getList();class PersonSql { public String getListSql() { String sql = new SQL() {{ SELECT("*"); FROM("person"); }}.toString(); return sql; }}
文章插图
使用场景三:数据库连接池,也会使用反射调用不同类型的数据库驱动,代码如下所示:
String url = "jdbc:MySQL://127.0.0.1:3306/mydb";String username = "root";String password = "root";Class.forName("com.mysql.jdbc.Driver");Connection connection = DriverManager.getConnection(url, username, password);
文章插图
当然反射还有其他很多类似的使用场景,这里就不一一列举,读者可以举一反三,想想在平常的开发中,还有哪些使用了反射功能的场景 。
反射的基本使用
下来我们通过反射调用类中的某个方法,来学习反射的基本使用 。
使用反射调用类中的方法,分为三种情况:
- 调用静态方法
- 调用公共方法
- 调用私有方法
package com.interview.chapter4;class MyReflect { // 静态方法 public static void staticMd() { System.out.println("Static Method"); } // 公共方法 public void publicMd() { System.out.println("Public Method"); } // 私有方法 private void privateMd() { System.out.println("Private Method"); }}
文章插图
下面分别来看,使用反射如何调用以上三种类型的方法 。
① 反射调用静态方法
Class myClass = Class.forName("com.interview.chapter4.MyReflect");Method method = myClass.getMethod("staticMd");method.invoke(myClass);
文章插图
② 反射调用公共方法
Class myClass = Class.forName("com.interview.chapter4.MyReflect");// 创建实例对象(相当于 new )Object instance = myClass.newInstance();Method method2 = myClass.getMethod("publicMd");method2.invoke(instance);
推荐阅读
- JAVA接私单10大平台,业余时间也能月入过万
- 22个有用的JavaScript单行程序
- Java NIO的三大核心配件:通道、缓冲区、选择器
- 一枚鸟蛋化石值多少钱 鸟蛋化石价格以及图片欣赏
- 二叉树的java实现,超级简单讲解版
- 鸟蛋化石值钱吗 鸟蛋化石价格以及图片欣赏
- 富士相机选购以及使用方法
- IDEA使用技巧以及如何连接数据库
- 科研团队在银河系中发现两个孕育恒星的巨大分子云 发射星云是星云气体反射及散射附近恒星可见光而亮的
- 这13个好用的JavaScript特性,估计你都没用过