用JAVA反射知识写一个简单的框架类

  1. 之前学习Spring框架的时候感觉很吃力,主要原因是反射的知识没有掌握好。今天把反射的知识认真地学了一下,对于框架的实现原理有了更深的认识。

  2. 框架简单的来说就是一个半成品软件。这里要求在不更改框架源码的情况下,让框架帮我们自动创建对象、调用方法。简单分析一下:
    ①首先,既然用户不能更改框架的源码,那么框架想要帮用户创建用户所自定义的类的对象,就不能直接“new 用户自定义的类”,框架是事先写好的,怎么会知道用户到底自己写了哪些类?总之,就是不能用“new”。
    ②既然不能用new,那只能用反射了。我们知道,获取Class对象有3种方式,其中一种方式是Class.forName(“全限定类名”)。注意这里的全限定类名是字符串,在编译的时候不会报错。
    ③于是,可以通过配置文件的方式,把配置文件中全限定类名读取出来,作为forName()方法的参数。那么,就可以获取一个Class对象了
    ④获取Class对象之后,就可以调用其中的方法了。当然,方法的名称也要在配置文件中写上才行。

  3. 下面是代码
    ①用户自定义的类:

package domain;
public class Student
{
    public void sleep()
    {
        System.out.println("我正在睡觉。。。");
    }
}

②框架类:

package reflect;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.Properties;

public class ReflectTest
{
    public static void main(String[] args) throws Exception
    {
        Properties properties=new Properties();
        ClassLoader classLoader = ReflectTest.class.getClassLoader();
        InputStream inputStream = classLoader.getResourceAsStream("pro.properties");
        properties.load(inputStream);

        String className = properties.getProperty("className");
        String methodName = properties.getProperty("methodName");

        Class aClass = Class.forName(className);

        Object o = aClass.newInstance();
        Method method = aClass.getMethod(methodName);
        method.invoke(o);

    }

}

  1. 配置文件pro.properties的内容如下:
className=domain.Student
methodName=sleep
  1. 运行结果
    在这里插入图片描述
发布了33 篇原创文章 · 获赞 0 · 访问量 1436

猜你喜欢

转载自blog.csdn.net/Deep_rooted/article/details/103934752
今日推荐