进阶注解处理器 processor (二)

什么是 AST

AST(Abstract Syntax Tree 抽象语法树)是一种用来描述程序代码语法结构的树形表示方式,语法树的每一个节点都代表着程序代码中的一个语法结构,例如包、类型、修饰符、运算符、接口、返回值,甚至代码注释等都可以是一个语法结构。

什么是 JCTree

JCTree是语法树元素的基类,它包含两个属性:
type:表示语法结构的类型。
pos:用于指明当前语法树节点(JCTree)在语法树中的位置,因此不能直接用new关键字来创建语法树节点,即使创建了也没有意义,而要用TreeMaker来进行操作。

public abstract class JCTree implements Tree, Cloneable, DiagnosticPosition {
    public int pos;
    public Type type;
    ...
}

JCTree 有很多子类,eg:
JCStatement、JCClassDecl、JCMethodDecl、JCVariableDecl、JCModifiers、JCExpression …
在后续多少都会用到。

什么是 TreeMaker

TreeMaker创建语法树节点的所有方法,创建时会为创建出来的JCTree设置pos字段,所以必须用上下文相关的TreeMaker对象来创建语法树节点,而不能直接new语法树节点。

Context context = ((JavacProcessingEnvironment) processingEnv).getContext();
TreeMaker treeMaker = TreeMaker.instance(context);
// ...

怎么使用 TreeMaker

部分方法示例:
TreeMaker.MethodDef
用于创建方法定义语法树节点(JCMethodDecl)

public JCMethodDecl MethodDef(JCModifiers mods, Name name,
       JCExpression returntype, List<JCTypeParameter> typarams,
       List<JCVariableDecl> params, List<JCExpression> thrown,
       JCBlock body, JCExpression defaultValue){
    JCMethodDecl tree = new JCMethodDecl(mods, name,
       returntype, typarams, params, thrown, body, 
       defaultValue, null);
    tree.pos = pos;
    return tree;
}

TreeMaker.VarDef
用于创建字段/变量定义语法树节点(JCVariableDecl)

public JCVariableDecl VarDef(JCModifiers mods, Name name, JCExpression vartype, 
        JCExpression init) {
    JCVariableDecl tree = new JCVariableDecl(mods, name, vartype, init, null);
    tree.pos = pos;
    return tree;
}

TreeMaker.Return
用于创建return语句语法树节点(JCReturn)

public JCReturn Return(JCExpression expression) {
    JCReturn jcReturn= new JCReturn(expression);
    jcReturn.pos = this.pos;
    return jcReturn;
}

结语

以上是与JCTree的初次会面,后续逐步进阶~

如果您看到了这里,欢迎和我沟通交流!
             一个95后码农

个人博客:fy-blog

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot项目中,注解处理器(Annotation Processors)是一种特殊类型的Java类,它们能够自动处理源代码级别的注解信息。配置SpringBoot的注解处理器通常涉及以下几个步骤: 1. **启用注解处理器支持**:在`application.properties`或`application.yml`文件中添加以下配置: ```properties spring.factories EnableAutoConfiguration=org.springframework.boot.autoconfigure_processor.AnnotationProcessorConfiguration ``` 2. **编写注解处理器**:创建一个实现了`javax.annotation.processing.Processor`接口的Java类,该类负责处理特定的注解。例如,如果你有一个自定义的@Mapper注解,你需要提供一个处理器来生成相应的映射代码。 3. **注册处理器**:在处理器类所在的模块的主类上添加`@EnableProcessors({YourCustomAnnotationProcessor.class})`,这里`YourCustomAnnotationProcessor`替换为你实际的处理器类名。 4. **Maven或Gradle配置**:确保在构建工具(如Maven或Gradle)的设置中正确扫描到注解处理器所在的包路径。例如,如果处理器在`com.example.myproject.annotations`包下,需要在pom.xml(Maven)或build.gradle(Gradle)中添加对应的扫描范围。 ```xml <!-- Maven --> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <sourceDirectory>${project.basedir}/src/main/java</sourceDirectory> <testSourceDirectory>${project.basedir}/src/test/java</testSourceDirectory> <additionalClasspathElements> <additionalClasspathElement>${project.build.outputDirectory}</additionalClasspathElement> </additionalClasspathElements> </configuration> </plugin> </plugins> </build> // Gradle tasks.withType(JavaCompile) { options.annotationProcessingOptions ProcessorOptions.includeCompileClasspath = true } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值