美文网首页
JAVA-反射机制和动态编译

JAVA-反射机制和动态编译

作者: 九号锅炉 | 来源:发表于2019-01-24 16:12 被阅读0次

    下面通过一段代码来引入反射机制的作用。

    Interface Function{
      void doWork();
    }
    class functionA implements Function{
      @Override
      public void doWork(){
              System.out.println("functionA");  
      }
    }
    class functionB implements Function{
      @Override
      public void doWork(){
              System.out.println("functionB");  
      }
    public static void main(){
        Function f = new functionA();//需要执行functionA方法时
        //Function f = new functionB();//需要执行functionB方法时
        f.doWork();
      }
    }
    

    以上代码看似很好的解决需要执行不同方法的问题,需要哪个方法只要修改new类型那行代码就可以了。但是这样需要将程序停下了修改,并且重新编译。而对于一个运行中的服务器而言,是不会允许服务器停下了去修改代码的,但是服务器往往需要不断修改。这里就使用到了java的反射机制来进行动态编译。

    Interface Function{
      void doWork();
    }
    class functionA implements Function{
      @Override
      public void doWork(){
              System.out.println("functionA");  
      }
    }
    class functionB implements Function{
      @Override
      public void doWork(){
              System.out.println("functionB");  
      }
    public static void main(){
            try{  
                String className = getClassNameFromConfig();//从配置文件读取需要的类名
                Function f=(Function)Class.forName(className).newInstance();  
                 f.doWork();
            }catch (Exception e) {  
                e.printStackTrace();  
            }  
      }
    }
    

    由于jvm类加载器会将所有类事先加载进来,使用反射时会去查找当前类是否被加载进来。这样只要修改配置文件中的类名就可以更改需要的类型,不需要重新编译。

    相关文章

      网友评论

          本文标题:JAVA-反射机制和动态编译

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