# common **Repository Path**: ccwilliam/common ## Basic Information - **Project Name**: common - **Description**: jwcao通用工具包 - **Primary Language**: Unknown - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2023-03-25 - **Last Updated**: 2025-08-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 小工具集合 > 一些小工具的集合 | 模块 | 说明 | | --- | --- | | common-scan | 一个扫描包的小工具,内部集成了 reflectasm | | common-cast | 一个负责类适配的小工具,可以使用在dto转换等场景 | ## Common-cast ### Getting Started 1.配置生效范围 ```java @EnableCast(basePackages = {"com.example"}) public class Application { public static void main(String[] args) { CastRunner.run(TestRunner.class); } } ``` 2.配置映射关系 ```java @CastObject(B.class) public class A { private String id; private String name; @CastField("bValue") private String aValue; ... } ``` ```java @CastObject(A.class) public class B { private String id; private String name; @CastField("bValue") private String bValue; ... } ``` 3.转换 ```java A sourceA=new A(); B sourceB=new B() B targetB=Cast.get(sourceA,B.class); A targetA=Cast.get(sourceB,A.class); ``` ### @CastObject 用于标记哪些类可以转换,只有标记了 @CastObject 会被扫描。 他包含如下属性: | 参数 | 说明 | 是否必选 | |------------------|-----------------------------------|------| | id | 对同一个目标类有多个转换方案,那么可以通过设置不同的 id 来区分 | 否 | | value | 要转换的目标类 | 是 | ```java @CastObject(value = B.class, id = "toB1") @CastObject(value = B.class, id = "toB2") public class A { ... } ``` ### @CastField 用来对转换的字段进行一些特殊定制,通常所有字段都会尝试进行转换,但是如果你有一些特殊的要求,可以使用该注解设置 | 参数 | 说明 | 是否必选 | |---------|--------------------------------|------| | id | 所属的方案id | 否 | | value | 要转换到目标类的字段名 | 否 | | childId | 如果该字段非基本类型,并且也需要转换,那么制定转换方案 id | 否 | ```java @CastField(id = "toB1", value = "bValue", childId = "toD1") @CastField(id = "toB2", value = "bValue", childId = "toD2") private C aValue ``` ### @CastGet 当有些转换字段当前类中不存在时,可以使用该方法,虚拟一个转换字段 | 参数 | 说明 | 是否必选 | |---------|--------------------------------|------| | id | 所属的方案id | 否 | | value | 要转换到目标类的字段名 | 否 | ```java @CastGet(id = "toA1", value = "bValue") public B toB(){ ... } ``` ### @CastToCallBack 转换完成后执行的回调函数 | 参数 | 说明 | 是否必选 | |---------|--------------------------------|------| | id | 所属的方案id | 否 | ```java @CastToCallBack(id = "toA1") public B callback(){ ... } ``` ### @CastIgnore 默认所有字段都会尝试进行转换,如果你不想转换某个字段,可以使用该注解排除 | 参数 | 说明 | 是否必选 | |---------|--------------------------------|------| | id | 所属的方案id | 否 | ```java @CastIgnore(id = "toA1") private C aValue ``` ### 性能 本库采用了反射+asm原理,由于涉及到反射,性能无法达到于原生的手写转换方法,但是由于有asm的加持,性能相对纯反射已经大大提高。在如下的机器上测试: | 配置 | 参数 | |----|---------| | 处理器 | 2.9 GHz 六核Intel Core i9 | | 内存 | 32 GB 2400 MHz DDR4 | ![img.png](img.png)