java-mapStruct源码走读

背景

最近在研究mapStruct,为了方便以后能顺手使用,本wiki将简单地走读一下源码。

源码走读

总览

源码下载:https://gitee.com/mirrors/mapstruct.git
在这里插入图片描述
在这里插入图片描述

pom模块概览

在这里插入图片描述

  • parent,只有一个pom文件,用于全局统一加载工具,例如guava、freemarker等
  • build-config,一些配置的xml集合
  • core,各种注解和常量的定义与实现
    在这里插入图片描述
  • core-jdk8,基本没啥用。。
  • distribution,配置maven打包的,主要用到了assembly(以后如果用到assembly,可以参考这里)
  • documentation,文档相关,借助了maven,进行文档打包
  • integrationtest,打包测试(暂时不在研究范围内)
  • processor,注解处理器

重点:processor、core

processor

注意:在看processor之前需要先编译一下root,否则工程会爆红,因为有很多代码是在编译之后生成的
目录结构
在这里插入图片描述
先看下services的配置

  • spi配置,运行时进行ioc加载用的
    在这里插入图片描述
  • apt,编译时执行
    在这里插入图片描述

下面直接查看AbstractProcessor的继承。核心处理Mapper注解的类。
在这里插入图片描述
MappingProcessor的目标是遍历执行所有processor的process方法
在这里插入图片描述
processor列表如下
在这里插入图片描述
中间的解析和处理逻辑不一一赘述,这里直接看FreeMarkerWritable类
在这里插入图片描述
明显是借助了freemarker模板,进行代码生成,具体的模板名是和类名一一对应的。
现随便找一个,IterableCreation.ftl
在这里插入图片描述
与模板关联的是一个实现ModelElement接口的类,用于提供ftl的数据。ftl+数据,之后写入到指定的路径,即可进行代码生成。
在这里插入图片描述

core

在core的包里面主要就是对注解的和自定义类型的定义,只有少许的函数实现。
在这里插入图片描述

评价

  • 有代码生成的需求,可以参考mapStruct的实现
  • mapStruct中使用到了apt和spi技术,也是一个学习的模板
  • freemarker物尽其用,也可以更多的进行参考
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值