A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 何俊 初级黑马   /  2018-11-29 14:09  /  395 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

              需求:写一个"框架",不能改变该类的任何代码的前提下,可以帮我们创建任意类的对象,并且执行其中任意方法
         实现:
        1. 配置文件
        2. 反射
         步骤:
        1. 将需要创建的对象的全类名和需要执行的方法定义在配置文件中
        2. 在程序中加载读取配置文件
        3. 使用反射技术来加载类文件进内存
        4. 创建对象
        5. 执行方法
        
  代码实现
                  实现:
//        1. 将需要创建的对象的全类名和需要执行的方法定义在配置文件中
        //1.1创建properties对象
        Properties properties = new Properties();
        //1.2加载配置文件转换为一个集合
        //1.2.1获取class目录下类加载器:用本类下的getClassLoader方法获取一个类加载器
        ClassLoader classLoader = ReflectTest.class.getClassLoader();
        //1.2.2用类加载器获取src目录下的配置文件,将其转换为字节流:类加载器的getResourceAsStream方法
        InputStream is = classLoader.getResourceAsStream("prp.properties");
        //1.2.3将字节流传入加载配置文件:properties下的load方法
        properties.load(is);

        //2.在程序中加载读取配置文件:properties下的getProperty方法
        //2.1获取全类名,
        String className = properties.getProperty("className");
        //2.2获取要执行的类的方法
        String methodName = properties.getProperty("methodName");

                //3. 使用反射技术来加载类文件进内存:Class下的forName
        Class aClass = Class.forName(className);

        //4. 创建对象:用class对象中单newInstance方法创建需要创建的类的对象
        Object o = aClass.newInstance();

        //5. 执行方法
        //5.1获取方法对象
        Method method = aClass.getMethod(methodName);
        //5.2执行方法:方法对象中的invoke方法,传入要执行的方法的对象的名称
        method.invoke(o);

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马