其他分享
首页 > 其他分享> > 从GraalVM到Quarkus系列-B002篇-Quarkus中的字节码框架gizmo

从GraalVM到Quarkus系列-B002篇-Quarkus中的字节码框架gizmo

作者:互联网

从GraalVM到Quarkus系列

A000篇-忽悠你用GraalVM
A001篇-NativeImage相关的注解
B001篇-NativeImage相关的注解@TargetClass
A002篇-GraalVM中的动态代理
A003篇-NativeImage中的资源


从GraalVM到Quarkus系列-B002篇-Quarkus中的字节码框架gizmo


前言

Quarkus中很多功能用到字节码生成,由于NativeImage是不支持运行时动态生成字节码的,所以Quarkus将很多运行时动态生成的代码放在静态分析之前生成


一、是什么?

Quarkus中使用的字节码生成工具是gizmo框架,这是对asm框架的封装,使其食用口感更佳

二、使用步骤

1.引入包

pom.xml:

在这里插入图片描述

2.创建一个ClassCreator

代码:

var creator = new ClassCreator((name, data) -> {
    var path = Thread.currentThread().getContextClassLoader()
    	.getResource("").getPath();
    System.out.println("输出路径:" + path);
    //文件输出流输出生成的class文件
    try (OutputStream os = Files.newOutputStream(Path.of(path + "/" + name + ".class"))) {
        //class文件输出到maven的target/classes
        os.write(data);
    } catch (IOException e) {
        e.printStackTrace();
    }
}, "cbs/demo/MyClass", null, Object.class.getName())

3.创建一个MethodCreator

在这里插入图片描述

4.运行代码生成class文件

在这里插入图片描述

5.其他操作


总结

标签:B002,tryBlock,name,生成,Quarkus,GraalVM,class,gizmo
来源: https://blog.csdn.net/cbs727505670/article/details/113831297