专栏首页FREE SOLO有哪些方法可以在运行时动态生成一个Java类?

有哪些方法可以在运行时动态生成一个Java类?

我们可以从常见的 Java 类来源分析,通常的开发过程是,开发者编写 Java 代码,调用 javac编译成 class 文件,然后通过类加载机制载入 JVM,就成为应用运行时可以使用的 Java 类了。从上面过程得到启发,其中一个直接的方式是从源码入手,可以利用 Java 程序生成一段源码,然后保存到文件等,下面就只需要解决编译问题了。 有一种笨办法,直接用 ProcessBuilder 之类启动 javac 进程,并指定上面生成的文件作为输入,进行编译。最后,再利用类加载器,在运行时加载即可。

对于一个普通的 Java 动态代理,其实现过程可以简化成为: 提供一个基础的接口,作为被调用类型(com.mycorp.HelloImpl)和代理类之间的统一入 口,如 com.mycorp.Hello。 实现InvocationHandler,对代理对象方法的调用,会被分派到其 invoke 方法来真正实现动 作。通过 Proxy 类,调用其 newProxyInstance 方法,生成一个实现了相应基础接口的代理类实例,可以看下面的方法签名。

public static Object newProxyInstance(ClassLoader loader,
Class<?>[] interfaces,
InvocationHandler h)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JavaScript和Java的区别?

    它是运行在浏览器中的一种脚本语言,在web页面中,Javascript可谓是无所不能:

    葆宁
  • Java单向链表实现

    葆宁
  • 谈谈你对 Java 平台的理解?“Java 是解释执行”,这句话正确吗?

    Java 本身是一种面向对象的语言,最显著的特性有两个方面,一是所谓的“书写一次,到处运行”(Write once, run anywhere),能够非常容易地...

    葆宁
  • JVM面试题

    启动Bootstrap类加载、扩展Extension类加载、系统System类加载。

    lyb-geek
  • JVM 面试必会面试题

    启动Bootstrap类加载、扩展Extension类加载、系统System类加载。

    好好学java
  • Java性能优化工具和技术

    介绍 Java是当今软件开发世界中使用最广泛的编程语言之一。 Java应用程序在许多垂直领域(银行,电信,医疗保健等)中使用,在某些情况下,每个垂直方向都会...

    用户1263954
  • Delphi调用动态链接库

    动态链接库(Dynamic Link Library,缩写为DLL)是一个可以被其它应用程序共享的程序模块,其中封装了一些可以被共享的例程和资源。动态链接库文件...

    Vaccae
  • 速读原著-Java 20 年:JVM 虚拟化技术的发展

    虚拟化技术已经有了几十年的发展历史,并且在硬件、操作系统层面都已经得到了广泛的应用。虚拟化不但可以显著节省成本,而且还可以提升管理性。同样,虚拟化技术也可以应用...

    cwl_java
  • IntelliJ IDEA 第一个 Scala 程序

    IntelliJ 安装完成 Scala 插件后,你需要尝试使用 IntelliJ 来创建并且运行第一个程序。

    HoneyMoose
  • Support Vector Machine(支持向量机)-机器学习基础

    版权声明:本文为博主原创文章,未经博主允许不得转载。 ...

    Steve Wang

扫码关注云+社区

领取腾讯云代金券