反射机制_经典案例解析


努力努力再努力xLg

反射

​ 通过Class对象获取class文件中的成员变量Filed、构造方法Constructor、方法Method的过程。

所谓万物皆对象,在Java中所有的对象都是有属于自己的Class对象。所以通过反射机制,可以很轻松的实现意想不到的功能。

​ 所以可以看作为框架设计的灵魂。

​ 它可以将类的各个组成部分封装为其他对象,这便是反射机制

好处

  1. 可以在程序运行过程中,操作这些对象。
  2. 可以解耦,提高程序的可扩展性。

有一处需要注意

​ 同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的Class对象都是同一个。

​ 所以在同一一次运行中,使用字节码获取到的不同名称的对象,实则都是同一个对象。

案例介绍

​ 需求:写一个"框架",不能改变该类的任何代码的前提下,可以帮我们创建任意类的对象,并且执行其中任意方法

​ 具体实现,这里选用配置文件加上反射机制,对任意类的实例化

package com.java.reflect;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 * 需求:
 * 写一个"框架",不能改变该类的任何代码的前提下,
 * 可以帮我们创建任意类的对象,并且执行其中任意方法
 * 

* 实现: 使用配置文件 配置 实例对象名称 * 再使用反射机制,对对象名称进行实例化 * * @author by Mr. Li * @date 2019/12/27 14:45 */ public class Test { public static void main(String[] args) throws Exception { // 1. 第一步 读取 配置文件 // 1.1 创建Properties类 Properties properties = new Properties(); // 使用当前类的classloader 获取 文件流对象 InputStream is = Test.class.getClassLoader().getResourceAsStream("pro.properties"); properties.load(is); // 2.使用反射 对配置文件中 要求的实例对象进行实例化 Class clazz = Class.forName(properties.getProperty("className")); String method = properties.getProperty("classMethod"); Object o = clazz.newInstance();// 实例化 clazz.getMethod(method).invoke(o); } }

希望 东西一点一点累计,能力一点一点攀升!加油

你可能感兴趣的:(反射机制_经典案例解析)