美文网首页
JAVA 反射应用

JAVA 反射应用

作者: 区块东西 | 来源:发表于2020-03-27 14:14 被阅读0次

    什么是反射?

    最简单的理解,可以将"ClassName"转换成一个真正的对象。可以动态的调用某个函数,创建某个类。
    像python,php这种动态语言很容易实现,java就需要借助反射。

    例子读取spring.txt中的字段,实例化类,调用方法

    示例代码:

    • test类
    package com.hellomaven;
    
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.lang.reflect.Constructor;
    import java.lang.reflect.Method;
    import java.util.Properties;
    
    public class TestService {
        @SuppressWarnings({"rawtypes", "unchecked"})
        public static void main(String[] args) throws Exception {
    
            File springConfigFile = new File("./src/main/java/com/hellomaven/spring.txt");
    
            //获取配置
            Properties springConfig = new Properties();
            springConfig.load(new FileInputStream(springConfigFile));
            String className = (String)springConfig.get("class");
            String methodName = (String)springConfig.get("method");
    
            //得到类类型
            Class clazz = Class.forName(className);
            //得到方法
            Method m = clazz.getMethod(methodName);
            //得到构造函数
            Constructor c = clazz.getConstructor();
            //构造一个实例,所有实例都继承自Object
            Object service = c.newInstance();
            //调用方法。
            m.invoke(service);
        }
    }
    
    • Hero类
    package com.hellomaven;
    
    public class Hero {
        public static void main(String []args){
            System.out.println("hello");
        }
    
        public String name;
        double hp;
        double mp;
    
        static String copyright;
        static {
            System.out.println("初始化 copyright");
            copyright = "版权由xxx公司所有";
        }
    
        public void Say(String words){
            System.out.println(words);
        }
    
        public void UseQ(){
            System.out.println("use q");
        }
    
        public void UseW(){
            System.out.println("use w");
        }
    }
    
    • spring.txt文件
    class=com.hellomaven.Hero
    method=UseQ
    

    相关文章

      网友评论

          本文标题:JAVA 反射应用

          本文链接:https://www.haomeiwen.com/subject/kiuluhtx.html