JavaNote_1.0.3_动态代理

JavaCompiler API

Java6 提供了Java Compiler API来动态编译Java代码。我们可以先生成java类的字符串或者文件,再使用Java Compiler API来动态编译Java类,最后再通过自定义ClassLoader来装载编译得到的字节码。需要依赖JDK的tools.jar

Java Compiler API的内容比较多,我们只需要关注下面两个主要的东西即可

  1. JavaCompiler 代表了当前系统的java编译器,通过ToolProvider.getSystemJavaCompiler()可以获取到。如果没有安装JDK或者环境变量设置不正确,此方法将返回null。JavaCompiler的getTask()方法用于创建编译任务。其中第二个和最后一个参数分别是必须的,分别是JavaFileManager对象以及需要编译的文件列表(Iterator)。此方法返回的ComplicationTask对象实现了Callable接口,可通过线程池来异步执行,也可以直接调用它的call()方法来同步执行。
  2. JavaFileManger 在执行编译的过程中,编译器需要读取Java源文件,查找这些源文件所依赖的jar包。再将编译结果,也就是字节码输出到文件。这些工作都是由JavaFileManager来完成的。通过JavaComplier对象的getStandardFileManager()方法可以返回系统的java文件管理对象(执行编译的时候用到的对象)。此方法的第一个参数为编译诊听器,作用是对编译过程产生的事件进行处理和输出。传null是表示默认的事件报告方法。后面的两个参数用于指定报告文件的语言区域和编码格式,且都可以为null。

猜你喜欢

转载自blog.csdn.net/h201601060805/article/details/130853764
今日推荐