JSR 269 Pluggable Annotation Processing API是Java社区规范,它允许开发者扩展Java编译器的注解处理能力。通过实现这个API,开发者可以创建自己的注解处理器,这些处理器可以在Java编译器(javac)运行时被调用,以处理特定的注解。
MapStruct是一个代码生成库,它使用注解处理器来生成Java Bean属性映射器实现。MapStruct通过实现JSR 269 API,可以在编译时分析带有特定注解的Java类,并根据这些注解生成属性映射器代码。
例如,当你使用MapStruct注解来标注两个Java Bean类,并希望通过注解处理器生成它们之间的映射代码时,MapStruct的注解处理器就会被javac调用。这个处理器会分析注解,生成映射器的实现代码,然后将这些代码插入到AST中。最终,javac会生成包含映射器实现类的字节码文件。
通过这种方式,MapStruct极大地简化了Java Bean属性映射的实现,开发者不需要手动编写繁琐的映射代码,只需通过简单的注解即可。
总之,JSR 269 API为Java编译器提供了强大的扩展能力,使得开发者可以根据自己的需求在编译时进行代码的生成和修改。MapStruct是这种能力的典型应用,它通过注解处理器在编译时生成属性映射代码,提高了开发效率。
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.5.5.Final</version> <!-- 使用最新版本 -->
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.5.5.Final</version> <!-- 使用最新版本 -->
<scope>provided</scope>
</dependency>
在MapStruct的包结构中,有两个主要的包:
org.mapstruct:mapstruct
:这个包包含了MapStruct的核心注解,这些注解是用来在接口方法上描述映射规则的。主要的注解包括: @Mapper
:用于标记一个接口为MapStruct的映射接口。@Mapping
:用于标记接口方法,表明该方法将会进行对象属性的映射。@Source
、@Target
、@AfterMapping
、@BeforeMapping
等:这些注解用于更精细地控制映射过程,比如指定源对象属性、目标对象属性、映射前后的操作等。org.mapstruct:mapstruct-processor
:这个包包含了MapStruct的注解处理器,它是用于处理上述注解的逻辑,并在编译期生成实现类。这个处理器会读取带有@Mapper
注解的接口,并根据接口方法上的@Mapping
等注解来生成具体的映射实现代码。这样,开发者就不需要手动编写映射逻辑,提高了开发效率。MapStruct使用基于生成器的方法创建类型安全的映射代码,这些代码在编译时生成,那如何调测编译期生成的代码呢? 请继续看
想在IDEA中通过远程调试的方式对Maven项目进行调试。
cd
命令来切换到POM文件所在的目录。
或者找到pom 右键 如下
执行mvnDebug compile:
在终端中输入以下命令来执行Maven构建并启动调试:
mvnDebug compile
这里的mvnDebug
是Maven的调试模式,它会在编译时启动调试器。确保在执行此命令前已经正确设置了Maven的环境变量。
在IDEA中配置远程JVM调试:
打开IDEA,按照以下步骤配置远程JVM调试:
xxx
类的属性,以确保有新的class文件生成,然后再次尝试点击"Debug"按钮。