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

答:

1)使用 Java Compiler API,这是 JDK 提供的标准 API,里面提供了与 javac 对等的编译器功能,源码编译过程中实现

2)直接动态生成字节码,用ASM、Javassist、cglib等

字节码和类加载到底是怎么无缝进行转换的?发生在整个类加载过程的哪一步?

JDK 提供的 defineClass 方法,最终都是本地代码实现的。

 

如何利用字节码操纵技术,实现基本的动态代理逻辑?

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

newProxyInstance 生成代理类实例的时候生成了动态代码

 

除了动态代理,字节码操纵技术还有那些应用场景?

各种 Mock 框架ORM 框架IOC 容器部分 Profiler 工具,或者运行时诊断工具等生成形式化代码的工具

3)还可以基于JVM实现各种动态语言。比如groovy就是使用java开发的动态脚本语言

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值