JAVA-反射机制和动态编译

2019-01-24  本文已影响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类加载器会将所有类事先加载进来,使用反射时会去查找当前类是否被加载进来。这样只要修改配置文件中的类名就可以更改需要的类型,不需要重新编译。

上一篇下一篇

猜你喜欢

热点阅读