diff --git a/README.md b/README.md
index 017740f4526b62ca4b213dc8b2b4af71c1d1bef9..b87831dbc782b34ea017b6c013b5d0b687e5db2e 100644
--- a/README.md
+++ b/README.md
@@ -188,7 +188,7 @@ public class User {
```xml
- 1.4.5
+ 1.4.6
diff --git a/docs/.vuepress/components/links.ts b/docs/.vuepress/components/links.ts
index 4ec415b51936180ef15e16827b6615c4cdee6a8c..b073abbef86db9601593774deb8fa1e602f10756 100644
--- a/docs/.vuepress/components/links.ts
+++ b/docs/.vuepress/components/links.ts
@@ -1,4 +1,6 @@
export const links = [
+ { logo: 'https://suzhi.fun/logo.svg', title: '速知吧', desc: '快速获取多网站信息平台、摸鱼必备网站\n简洁直观的界面,轻松掌握热门资讯、榜单信息', link: 'https://suzhi.fun' },
{ logo: 'https://plus-doc.dromara.org/static/image/logo.png', title: 'RuoYi-Vue-Plus 多租户权限管理系统', desc: '真正面向企业级的应用框架\n组件化 模块化 轻耦合 高扩展 针对企业痛点 业界一流技术栈', link: 'https://plus-doc.dromara.org/#/' },
{ logo: 'https://demo.orangeforms.com/img/login_logo2.424461a3.png', title: '免费代码生成工具', desc: '卓越的代码生成能力,全优的代码生成质量', link: 'https://www.orangeforms.com/' }
+
]
\ No newline at end of file
diff --git a/docs/README.md b/docs/README.md
index 365eb6161636d220bdaa155450f1bdb1f2ccfa24..7685f503a464f3bc7f7921ebde3f1b273755464b 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -61,18 +61,24 @@ footer:
io.github.linpeilie
mapstruct-plus-spring-boot-starter
- 1.4.5
+ 1.4.6
```
- gradle
```groovy
-implementation group: 'io.github.linpeilie', name: 'mapstruct-plus-spring-boot-starter', version: '1.4.5'
+implementation group: 'io.github.linpeilie', name: 'mapstruct-plus-spring-boot-starter', version: '1.4.6'
```
## 更新日志
+### 1.4.6
+
+- 修改 `SpringContextUtils` 类名,防止与其他项目类名冲突;
+- fix [#108](https://github.com/linpeilie/mapstruct-plus/issues/108) : SpringContextUtils#getBeanFactory 方法改为静态;
+- [pr](https://github.com/linpeilie/mapstruct-plus/pull/114) : 增加注解批量增加 `AutoMapping`、`AutoMappings`、`ReverseAutoMapping`、`ReverseAutoMappings` 特性;
+
### 1.4.5
- fix: 修复 `ReverseAutoMappings` 配置不生效的问题
diff --git a/docs/en/README.md b/docs/en/README.md
index 51c017f451a340f7f737b057bfb37eaf816eacd0..d3063e7411ad533c64c51d2b0c7ab7bc909ea51b 100644
--- a/docs/en/README.md
+++ b/docs/en/README.md
@@ -58,18 +58,25 @@ fotter:
io.github.linpeilie
mapstruct-plus-spring-boot-starter
- 1.4.5
+ 1.4.6
```
- gradle
```groovy
-implementation group: 'io.github.linpeilie', name: 'mapstruct-plus-spring-boot-starter', version: '1.4.5'
+implementation group: 'io.github.linpeilie', name: 'mapstruct-plus-spring-boot-starter', version: '1.4.6'
```
## Change Log
+### 1.4.6
+
+- Modify the `SpringContextUtils` class name to prevent conflicts with other project class names;
+- fix [#108](https://github.com/linpeilie/mapstruct-plus/issues/108) : SpringContextUtils#getBeanFactory method changes to static;
+- [PR](https://github.com/linpeilie/mapstruct-plus/pull/114) : increase annotation batch `AutoMapping`、`AutoMappings`、`ReverseAutoMapping`、`ReverseAutoMappings` features.
+
+
### 1.4.5
- fix: fiexed an issue where the `ReverseAutoMapping` configuration did not take effect.
diff --git a/docs/en/release/log.md b/docs/en/release/log.md
index d928690e3aa3fc4d99a82f26e6ee0d062d301b0b..d7b0a7832c2be7f5b81ac6b988657693824b1f4b 100644
--- a/docs/en/release/log.md
+++ b/docs/en/release/log.md
@@ -6,6 +6,12 @@ category:
description: MapStructPlus release log
---
+### 1.4.6
+
+- Modify the `SpringContextUtils` class name to prevent conflicts with other project class names;
+- fix [#108](https://github.com/linpeilie/mapstruct-plus/issues/108) : SpringContextUtils#getBeanFactory method changes to static;
+- [PR](https://github.com/linpeilie/mapstruct-plus/pull/114) : increase annotation batch `AutoMapping`、`AutoMappings`、`ReverseAutoMapping`、`ReverseAutoMappings` features.
+
### 1.4.5
- fix: fiexed an issue where the `ReverseAutoMapping` configuration did not take effect.
diff --git a/docs/release/log.md b/docs/release/log.md
index d1f1b89305307f69322405f1f5b305a75591cfae..4ca52a406db5ebc86321175e76eef5752f180992 100644
--- a/docs/release/log.md
+++ b/docs/release/log.md
@@ -6,6 +6,12 @@ category:
description: MapStructPlus release log
---
+### 1.4.6
+
+- 修改 `SpringContextUtils` 类名,防止与其他项目类名冲突;
+- fix [#108](https://github.com/linpeilie/mapstruct-plus/issues/108) : SpringContextUtils#getBeanFactory 方法改为静态;
+- [pr](https://github.com/linpeilie/mapstruct-plus/pull/114) : 增加注解批量增加 `AutoMapping`、`AutoMappings`、`ReverseAutoMapping`、`ReverseAutoMappings` 特性;
+
### 1.4.5
- fix: 修复 `ReverseAutoMappings` 配置不生效的问题
diff --git a/example/pom.xml b/example/pom.xml
index 524c0b81ee63e6b3d4a8d3ead27a80f0b0c67507..c822a194ff442605236dce1ca6569d8d4499ac20 100644
--- a/example/pom.xml
+++ b/example/pom.xml
@@ -18,7 +18,7 @@
UTF-8
1.5.1.Final
- 1.4.5
+ 1.4.6
1.18.22
5.8.26
32.1.3-jre
diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/CarCreate.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/CarCreate.java
new file mode 100644
index 0000000000000000000000000000000000000000..9c5d4eb53a44aac5d7de5e082801802bbede931a
--- /dev/null
+++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/CarCreate.java
@@ -0,0 +1,15 @@
+package io.github.linpeilie.me.annotation.am;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+@Data
+@CreateMapper
+@AutoMapper(target = CarDTO.class)
+public class CarCreate {
+
+ private String name;
+
+ private String operatorUserId;
+
+}
diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/CarDTO.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/CarDTO.java
new file mode 100644
index 0000000000000000000000000000000000000000..95719218629ca3001a422ec0d13b3473bf32c39b
--- /dev/null
+++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/CarDTO.java
@@ -0,0 +1,14 @@
+package io.github.linpeilie.me.annotation.am;
+
+import lombok.Data;
+
+@Data
+public class CarDTO {
+
+ private String name;
+
+ private String createBy;
+
+ private String updateBy;
+
+}
diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/CarUpdate.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/CarUpdate.java
new file mode 100644
index 0000000000000000000000000000000000000000..8b5c525494b9499e862a694ff368574a0e442b0a
--- /dev/null
+++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/CarUpdate.java
@@ -0,0 +1,15 @@
+package io.github.linpeilie.me.annotation.am;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+@Data
+@UpdateMapper
+@AutoMapper(target = CarDTO.class)
+public class CarUpdate {
+
+ private String name;
+
+ private String operatorUserId;
+
+}
diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/CreateMapper.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/CreateMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..9211bd2e8dbebdad0df11375fd61ecdce8b6856f
--- /dev/null
+++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/CreateMapper.java
@@ -0,0 +1,7 @@
+package io.github.linpeilie.me.annotation.am;
+
+import io.github.linpeilie.annotations.AutoMapping;
+
+@AutoMapping(source = "operatorUserId", target = "createBy")
+public @interface CreateMapper {
+}
diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/UpdateMapper.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/UpdateMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..85abd6913cd621fd46d1e20f4a9d8c858e166859
--- /dev/null
+++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/am/UpdateMapper.java
@@ -0,0 +1,8 @@
+package io.github.linpeilie.me.annotation.am;
+
+import io.github.linpeilie.annotations.AutoMapping;
+
+@AutoMapping(source = "operatorUserId", target = "updateBy")
+public @interface UpdateMapper {
+
+}
diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ams/CarCreate2.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ams/CarCreate2.java
new file mode 100644
index 0000000000000000000000000000000000000000..157b673cbfafd72afc2d35ecaae608fda988c339
--- /dev/null
+++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ams/CarCreate2.java
@@ -0,0 +1,15 @@
+package io.github.linpeilie.me.annotation.ams;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+@Data
+@CreateMapper
+@AutoMapper(target = CarDTO2.class)
+public class CarCreate2 {
+
+ private String name;
+
+ private String operatorUserId;
+
+}
diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ams/CarDTO2.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ams/CarDTO2.java
new file mode 100644
index 0000000000000000000000000000000000000000..5ffb1c52f288d0a0c8f048224ff855b39f10242f
--- /dev/null
+++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ams/CarDTO2.java
@@ -0,0 +1,14 @@
+package io.github.linpeilie.me.annotation.ams;
+
+import lombok.Data;
+
+@Data
+public class CarDTO2 {
+
+ private String name;
+
+ private String createBy;
+
+ private String updateBy;
+
+}
diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ams/CarUpdate2.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ams/CarUpdate2.java
new file mode 100644
index 0000000000000000000000000000000000000000..70025a7775d41ba51e729d257753c50a8744462e
--- /dev/null
+++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ams/CarUpdate2.java
@@ -0,0 +1,15 @@
+package io.github.linpeilie.me.annotation.ams;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+@Data
+@UpdateMapper
+@AutoMapper(target = CarDTO2.class)
+public class CarUpdate2 {
+
+ private String name;
+
+ private String operatorUserId;
+
+}
diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ams/CreateMapper.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ams/CreateMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..7240c3839d851c53f415e916673ef6989a6fba10
--- /dev/null
+++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ams/CreateMapper.java
@@ -0,0 +1,10 @@
+package io.github.linpeilie.me.annotation.ams;
+
+import io.github.linpeilie.annotations.AutoMapping;
+import io.github.linpeilie.annotations.AutoMappings;
+
+@AutoMappings({
+ @AutoMapping(source = "operatorUserId", target = "createBy")
+})
+public @interface CreateMapper {
+}
diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ams/UpdateMapper.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ams/UpdateMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..db9546f6467030617b58b7620c751788d07411ff
--- /dev/null
+++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ams/UpdateMapper.java
@@ -0,0 +1,11 @@
+package io.github.linpeilie.me.annotation.ams;
+
+import io.github.linpeilie.annotations.AutoMapping;
+import io.github.linpeilie.annotations.AutoMappings;
+
+@AutoMappings({
+ @AutoMapping(source = "operatorUserId", target = "updateBy")
+})
+public @interface UpdateMapper {
+
+}
diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ram/CarCreate1.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ram/CarCreate1.java
new file mode 100644
index 0000000000000000000000000000000000000000..92334037a887445869584076fa4aa69bf1a30354
--- /dev/null
+++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ram/CarCreate1.java
@@ -0,0 +1,15 @@
+package io.github.linpeilie.me.annotation.ram;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+@Data
+@CreateMapper
+@AutoMapper(target = CarDTO1.class)
+public class CarCreate1 {
+
+ private String name;
+
+ private String operatorUserId;
+
+}
diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ram/CarDTO1.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ram/CarDTO1.java
new file mode 100644
index 0000000000000000000000000000000000000000..050cc3c06edca02067ddd8c4658e26373e0de613
--- /dev/null
+++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ram/CarDTO1.java
@@ -0,0 +1,14 @@
+package io.github.linpeilie.me.annotation.ram;
+
+import lombok.Data;
+
+@Data
+public class CarDTO1 {
+
+ private String name;
+
+ private String createBy;
+
+ private String updateBy;
+
+}
diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ram/CarUpdate1.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ram/CarUpdate1.java
new file mode 100644
index 0000000000000000000000000000000000000000..1d632082d7594788b8665f7821d69a0ca9dc8c71
--- /dev/null
+++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ram/CarUpdate1.java
@@ -0,0 +1,15 @@
+package io.github.linpeilie.me.annotation.ram;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+@Data
+@UpdateMapper
+@AutoMapper(target = CarDTO1.class)
+public class CarUpdate1 {
+
+ private String name;
+
+ private String operatorUserId;
+
+}
diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ram/CreateMapper.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ram/CreateMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..e969e28070759fee812cd6d7b317181b30f28630
--- /dev/null
+++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ram/CreateMapper.java
@@ -0,0 +1,9 @@
+package io.github.linpeilie.me.annotation.ram;
+
+import io.github.linpeilie.annotations.AutoMapping;
+import io.github.linpeilie.annotations.ReverseAutoMapping;
+
+@ReverseAutoMapping(source = "createBy", target = "operatorUserId")
+@AutoMapping(source = "operatorUserId", target = "createBy")
+public @interface CreateMapper {
+}
diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ram/UpdateMapper.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ram/UpdateMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..e723aa996283e8c91bb5f2111802414819cf6ba8
--- /dev/null
+++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/ram/UpdateMapper.java
@@ -0,0 +1,10 @@
+package io.github.linpeilie.me.annotation.ram;
+
+import io.github.linpeilie.annotations.AutoMapping;
+import io.github.linpeilie.annotations.ReverseAutoMapping;
+
+@ReverseAutoMapping(source = "updateBy", target = "operatorUserId")
+@AutoMapping(source = "operatorUserId", target = "updateBy")
+public @interface UpdateMapper {
+
+}
diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/rams/CarCreate4.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/rams/CarCreate4.java
new file mode 100644
index 0000000000000000000000000000000000000000..c79d275b8eb32a2ed32722a81348015d16730298
--- /dev/null
+++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/rams/CarCreate4.java
@@ -0,0 +1,15 @@
+package io.github.linpeilie.me.annotation.rams;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+@Data
+@CreateMapper
+@AutoMapper(target = CarDTO4.class)
+public class CarCreate4 {
+
+ private String name;
+
+ private String operatorUserId;
+
+}
diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/rams/CarDTO4.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/rams/CarDTO4.java
new file mode 100644
index 0000000000000000000000000000000000000000..09e82164eea0aca28786fbb57a56df782a7c05fa
--- /dev/null
+++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/rams/CarDTO4.java
@@ -0,0 +1,14 @@
+package io.github.linpeilie.me.annotation.rams;
+
+import lombok.Data;
+
+@Data
+public class CarDTO4 {
+
+ private String name;
+
+ private String createBy;
+
+ private String updateBy;
+
+}
diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/rams/CarUpdate4.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/rams/CarUpdate4.java
new file mode 100644
index 0000000000000000000000000000000000000000..d51f54f0d19ebeecb129f2ce5c41927f080eec73
--- /dev/null
+++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/rams/CarUpdate4.java
@@ -0,0 +1,15 @@
+package io.github.linpeilie.me.annotation.rams;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+@Data
+@UpdateMapper
+@AutoMapper(target = CarDTO4.class)
+public class CarUpdate4 {
+
+ private String name;
+
+ private String operatorUserId;
+
+}
diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/rams/CreateMapper.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/rams/CreateMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..368393d7df6ba6cb6bd53843f2ecc5107915b553
--- /dev/null
+++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/rams/CreateMapper.java
@@ -0,0 +1,15 @@
+package io.github.linpeilie.me.annotation.rams;
+
+import io.github.linpeilie.annotations.AutoMapping;
+import io.github.linpeilie.annotations.AutoMappings;
+import io.github.linpeilie.annotations.ReverseAutoMapping;
+import io.github.linpeilie.annotations.ReverseAutoMappings;
+
+@ReverseAutoMappings({
+ @ReverseAutoMapping(source = "createBy", target = "operatorUserId")
+})
+@AutoMappings({
+ @AutoMapping(source = "operatorUserId", target = "createBy")
+})
+public @interface CreateMapper {
+}
diff --git a/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/rams/UpdateMapper.java b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/rams/UpdateMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..76a35f637e1628c81f4906f39ac925c78d21858c
--- /dev/null
+++ b/example/spring-boot-with-lombok/src/main/java/io/github/linpeilie/me/annotation/rams/UpdateMapper.java
@@ -0,0 +1,14 @@
+package io.github.linpeilie.me.annotation.rams;
+
+import io.github.linpeilie.annotations.AutoMapping;
+import io.github.linpeilie.annotations.AutoMappings;
+import io.github.linpeilie.annotations.ReverseAutoMapping;
+import io.github.linpeilie.annotations.ReverseAutoMappings;
+
+@ReverseAutoMappings({
+ @ReverseAutoMapping(source = "updateBy", target = "operatorUserId")})
+@AutoMappings({
+ @AutoMapping(source = "operatorUserId", target = "updateBy")})
+public @interface UpdateMapper {
+
+}
diff --git a/example/spring-boot-with-lombok/src/test/java/io/github/linpeilie/AutoMappingAnnotationTest.java b/example/spring-boot-with-lombok/src/test/java/io/github/linpeilie/AutoMappingAnnotationTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..5d6c200a84c7b11e3857c4635e5354865b748006
--- /dev/null
+++ b/example/spring-boot-with-lombok/src/test/java/io/github/linpeilie/AutoMappingAnnotationTest.java
@@ -0,0 +1,147 @@
+package io.github.linpeilie;
+
+import io.github.linpeilie.me.annotation.am.CarCreate;
+import io.github.linpeilie.me.annotation.am.CarDTO;
+import io.github.linpeilie.me.annotation.am.CarUpdate;
+import io.github.linpeilie.me.annotation.ams.CarCreate2;
+import io.github.linpeilie.me.annotation.ams.CarDTO2;
+import io.github.linpeilie.me.annotation.ams.CarUpdate2;
+import io.github.linpeilie.me.annotation.ram.CarCreate1;
+import io.github.linpeilie.me.annotation.ram.CarDTO1;
+import io.github.linpeilie.me.annotation.ram.CarUpdate1;
+import io.github.linpeilie.me.annotation.rams.CarCreate4;
+import io.github.linpeilie.me.annotation.rams.CarDTO4;
+import io.github.linpeilie.me.annotation.rams.CarUpdate4;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.util.Assert;
+
+@Slf4j
+@SpringBootTest(classes = Application.class)
+public class AutoMappingAnnotationTest {
+
+ @Autowired
+ private Converter converter;
+
+ @Test
+ public void autoMappingTest() {
+ CarCreate carCreate = new CarCreate();
+ carCreate.setName("create car");
+ carCreate.setOperatorUserId("create user id....");
+
+ CarDTO car1 = converter.convert(carCreate, CarDTO.class);
+ log.info("create user : {}", car1);
+ Assert.isTrue(car1.getName().equals("create car"), "create user name is empty");
+ Assert.isTrue(car1.getCreateBy().equals("create user id...."), "create user id is empty");
+
+ CarCreate carCreate1 = converter.convert(car1, CarCreate.class);
+ Assert.isTrue(carCreate1.getName().equals("create car"), "create user name is empty");
+ Assert.isTrue(carCreate1.getOperatorUserId().equals("create user id...."), "create user id is empty");
+
+
+ CarUpdate carUpdate = new CarUpdate();
+ carUpdate.setName("update car");
+ carUpdate.setOperatorUserId("update user id....");
+
+ CarDTO car2 = converter.convert(carUpdate, CarDTO.class);
+ log.info("update user : {}", car2);
+ Assert.isTrue(car2.getName().equals("update car"), "update user name is empty");
+ Assert.isTrue(car2.getUpdateBy().equals("update user id...."), "update user id is empty");
+
+ CarUpdate updateCar1 = converter.convert(car2, CarUpdate.class);
+ Assert.isTrue(updateCar1.getName().equals("update car"), "update user name is empty");
+ Assert.isTrue(updateCar1.getOperatorUserId().equals("update user id...."), "update user id is empty");
+ }
+
+ @Test
+ public void reverseAutoMappingTest() {
+ CarCreate1 carCreate = new CarCreate1();
+ carCreate.setName("create car");
+ carCreate.setOperatorUserId("create user id....");
+
+ CarDTO1 car1 = converter.convert(carCreate, CarDTO1.class);
+ log.info("create user : {}", car1);
+ Assert.isTrue(car1.getName().equals("create car"), "create user name is empty");
+ Assert.isTrue(car1.getCreateBy().equals("create user id...."), "create user id is empty");
+
+ CarCreate1 carCreate1 = converter.convert(car1, CarCreate1.class);
+ Assert.isTrue(carCreate1.getName().equals("create car"), "create user name is empty");
+ Assert.isTrue(carCreate1.getOperatorUserId().equals("create user id...."), "create user id is empty");
+
+
+ CarUpdate1 carUpdate = new CarUpdate1();
+ carUpdate.setName("update car");
+ carUpdate.setOperatorUserId("update user id....");
+
+ CarDTO1 car2 = converter.convert(carUpdate, CarDTO1.class);
+ log.info("update user : {}", car2);
+ Assert.isTrue(car2.getName().equals("update car"), "update user name is empty");
+ Assert.isTrue(car2.getUpdateBy().equals("update user id...."), "update user id is empty");
+
+ CarUpdate1 updateCar1 = converter.convert(car2, CarUpdate1.class);
+ Assert.isTrue(updateCar1.getName().equals("update car"), "update user name is empty");
+ Assert.isTrue(updateCar1.getOperatorUserId().equals("update user id...."), "update user id is empty");
+ }
+ @Test
+ public void autoMappingsTest() {
+ CarCreate2 carCreate = new CarCreate2();
+ carCreate.setName("create car");
+ carCreate.setOperatorUserId("create user id....");
+
+ CarDTO2 car1 = converter.convert(carCreate, CarDTO2.class);
+ log.info("create user : {}", car1);
+ Assert.isTrue(car1.getName().equals("create car"), "create user name is empty");
+ Assert.isTrue(car1.getCreateBy().equals("create user id...."), "create user id is empty");
+
+ CarCreate2 carCreate1 = converter.convert(car1, CarCreate2.class);
+ Assert.isTrue(carCreate1.getName().equals("create car"), "create user name is empty");
+ Assert.isTrue(carCreate1.getOperatorUserId().equals("create user id...."), "create user id is empty");
+
+
+ CarUpdate2 carUpdate = new CarUpdate2();
+ carUpdate.setName("update car");
+ carUpdate.setOperatorUserId("update user id....");
+
+ CarDTO2 car2 = converter.convert(carUpdate, CarDTO2.class);
+ log.info("update user : {}", car2);
+ Assert.isTrue(car2.getName().equals("update car"), "update user name is empty");
+ Assert.isTrue(car2.getUpdateBy().equals("update user id...."), "update user id is empty");
+
+ CarUpdate2 updateCar1 = converter.convert(car2, CarUpdate2.class);
+ Assert.isTrue(updateCar1.getName().equals("update car"), "update user name is empty");
+ Assert.isTrue(updateCar1.getOperatorUserId().equals("update user id...."), "update user id is empty");
+ }
+ @Test
+ public void reverseAutoMappingsTest() {
+ CarCreate4 carCreate = new CarCreate4();
+ carCreate.setName("create car");
+ carCreate.setOperatorUserId("create user id....");
+
+ CarDTO4 car1 = converter.convert(carCreate, CarDTO4.class);
+ log.info("create user : {}", car1);
+ Assert.isTrue(car1.getName().equals("create car"), "create user name is empty");
+ Assert.isTrue(car1.getCreateBy().equals("create user id...."), "create user id is empty");
+
+ CarCreate4 carCreate1 = converter.convert(car1, CarCreate4.class);
+ Assert.isTrue(carCreate1.getName().equals("create car"), "create user name is empty");
+ Assert.isTrue(carCreate1.getOperatorUserId().equals("create user id...."), "create user id is empty");
+
+
+ CarUpdate4 carUpdate = new CarUpdate4();
+ carUpdate.setName("update car");
+ carUpdate.setOperatorUserId("update user id....");
+
+ CarDTO4 car2 = converter.convert(carUpdate, CarDTO4.class);
+ log.info("update user : {}", car2);
+ Assert.isTrue(car2.getName().equals("update car"), "update user name is empty");
+ Assert.isTrue(car2.getUpdateBy().equals("update user id...."), "update user id is empty");
+
+ CarUpdate4 updateCar1 = converter.convert(car2, CarUpdate4.class);
+ Assert.isTrue(updateCar1.getName().equals("update car"), "update user name is empty");
+ Assert.isTrue(updateCar1.getOperatorUserId().equals("update user id...."), "update user id is empty");
+ }
+
+
+}
diff --git a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/AutoMapperProcessor.java b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/AutoMapperProcessor.java
index 978a4d9e2a793291262d36f6e932bb5ff8f9aa02..754ff134cc2a9f880e28522c6461393e58825d4f 100644
--- a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/AutoMapperProcessor.java
+++ b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/AutoMapperProcessor.java
@@ -4,10 +4,10 @@ import com.squareup.javapoet.ArrayTypeName;
import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.ParameterizedTypeName;
import com.squareup.javapoet.TypeName;
-import io.github.linpeilie.ComponentModelConstant;
import io.github.linpeilie.annotations.AutoEnumMapper;
import io.github.linpeilie.annotations.AutoMapMapper;
import io.github.linpeilie.annotations.ComponentModelConfig;
+import io.github.linpeilie.annotations.ReverseAutoMapping;
import io.github.linpeilie.processor.gem.AutoMapperGem;
import io.github.linpeilie.processor.gem.AutoMappersGem;
import io.github.linpeilie.processor.gem.AutoMappingGem;
@@ -18,10 +18,7 @@ import io.github.linpeilie.processor.gem.ReverseAutoMappingGem;
import io.github.linpeilie.processor.gem.ReverseAutoMappingsGem;
import io.github.linpeilie.processor.generator.AutoEnumMapperGenerator;
import io.github.linpeilie.processor.generator.AutoMapperGenerator;
-import io.github.linpeilie.processor.generator.DefaultAdapterMapperGenerator;
import io.github.linpeilie.processor.generator.MapperConfigGenerator;
-import io.github.linpeilie.processor.generator.SolonAdapterMapperGenerator;
-import io.github.linpeilie.processor.generator.SpringAdapterMapperGenerator;
import io.github.linpeilie.processor.metadata.AbstractAdapterMethodMetadata;
import io.github.linpeilie.processor.metadata.AdapterEnumMethodMetadata;
import io.github.linpeilie.processor.metadata.AdapterMapMethodMetadata;
@@ -57,15 +54,12 @@ import javax.annotation.processing.RoundEnvironment;
import javax.annotation.processing.SupportedAnnotationTypes;
import javax.annotation.processing.SupportedOptions;
import javax.lang.model.SourceVersion;
-import javax.lang.model.element.Element;
-import javax.lang.model.element.ElementKind;
-import javax.lang.model.element.ExecutableElement;
-import javax.lang.model.element.TypeElement;
+import javax.lang.model.element.*;
+import javax.lang.model.type.DeclaredType;
import javax.lang.model.type.MirroredTypeException;
import javax.lang.model.type.MirroredTypesException;
import javax.lang.model.type.TypeMirror;
import javax.tools.Diagnostic;
-import org.mapstruct.MappingConstants;
import static io.github.linpeilie.processor.ProcessorOptions.ADAPTER_CLASS_NAME;
import static io.github.linpeilie.processor.ProcessorOptions.ADAPTER_PACKAGE;
@@ -909,6 +903,9 @@ public class AutoMapperProcessor extends AbstractProcessor {
if (!ele.getKind().isClass() && !ele.getKind().isInterface()) {
return list;
}
+
+ list.addAll(buildMirrorAnno4ReverseAutoMapping(ele));
+
for (Element field : ele.getEnclosedElements()) {
if (field.getKind() != ElementKind.FIELD && field.getKind() != ElementKind.METHOD) {
continue;
@@ -990,6 +987,8 @@ public class AutoMapperProcessor extends AbstractProcessor {
return list;
}
+ list.addAll(buildMirrorAnno4AutoMapping(autoMapperEle));
+
for (Element ele : autoMapperEle.getEnclosedElements()) {
if (ele.getKind() != ElementKind.FIELD && ele.getKind() != ElementKind.METHOD) {
continue;
@@ -1010,6 +1009,55 @@ public class AutoMapperProcessor extends AbstractProcessor {
list.removeIf(Objects::isNull);
return list;
}
+ /**
+ * 处理注解上存在@AutoMapping的情况
+ *
+ * @param element element
+ */
+ private List buildMirrorAnno4AutoMapping(final TypeElement element) {
+ List list = new ArrayList<>();
+ List extends AnnotationMirror> allAnnotationMirrors = processingEnv.getElementUtils().getAllAnnotationMirrors(element);
+ for (AnnotationMirror annotationMirror : allAnnotationMirrors) {
+ DeclaredType annotationType = annotationMirror.getAnnotationType();
+ TypeElement annotationElement = (TypeElement) annotationType.asElement();
+ if (annotationElement == null) {
+ continue;
+ }
+ AutoMappingGem autoMappingGem = AutoMappingGem.instanceOn(annotationElement);
+ if (autoMappingGem != null && autoMappingGem.isValid()) {
+ list.add(buildAutoMappingMetadata(autoMappingGem, element));
+ }
+ AutoMappingsGem autoMappingsGem = AutoMappingsGem.instanceOn(annotationElement);
+ if (autoMappingsGem != null && autoMappingsGem.isValid()) {
+ autoMappingsGem.value().get().forEach(a -> list.add(buildAutoMappingMetadata(a, element)));
+ }
+
+ }
+ return list;
+ }
+
+ private List buildMirrorAnno4ReverseAutoMapping(final TypeElement element) {
+ List list = new ArrayList<>();
+ List extends AnnotationMirror> allAnnotationMirrors = processingEnv.getElementUtils().getAllAnnotationMirrors(element);
+ for (AnnotationMirror annotationMirror : allAnnotationMirrors) {
+ DeclaredType annotationType = annotationMirror.getAnnotationType();
+ TypeElement annotationElement = (TypeElement) annotationType.asElement();
+ if (annotationElement == null) {
+ continue;
+ }
+ ReverseAutoMappingGem reverseAutoMapping = ReverseAutoMappingGem.instanceOn(annotationElement);
+ if (reverseAutoMapping != null && reverseAutoMapping.isValid()) {
+ list.add(buildAutoMappingMetadata(reverseAutoMapping, element));
+ }
+ ReverseAutoMappingsGem reverseAutoMappings = ReverseAutoMappingsGem.instanceOn(annotationElement);
+ if (reverseAutoMappings != null && reverseAutoMappings.isValid()) {
+ reverseAutoMappings.value().get().forEach(a -> list.add(buildAutoMappingMetadata(a, element)));
+ }
+
+ }
+ return list;
+ }
+
private AutoMappingMetadata buildAutoMappingMetadata(AutoMappingGem autoMappingGem, Element ele) {
ClassName targetClass = transToClassName(autoMappingGem.targetClass().get());
diff --git a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/enhance/processor/SpringComponentProcessor.java b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/enhance/processor/SpringComponentProcessor.java
index 8d74245953b18f11303039b526b9b95ddb5db5f3..dd385e70d8450a4f1b42932b948aeb9e3ef1aaa4 100644
--- a/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/enhance/processor/SpringComponentProcessor.java
+++ b/mapstruct-plus-processor/src/main/java/io/github/linpeilie/processor/enhance/processor/SpringComponentProcessor.java
@@ -43,6 +43,6 @@ public class SpringComponentProcessor extends AnnotationBasedComponentModelProce
InjectionStrategyGem injectionStrategy) {
return new SpringDelayInjectMapperReference(originalReference.getType(), originalReference.getVariableName(),
originalReference.isUsed(),
- getTypeFactory().getType("io.github.linpeilie.mapstruct.SpringContextUtils"));
+ getTypeFactory().getType("io.github.linpeilie.mapstruct.SpringContextUtils4Msp"));
}
}
diff --git a/mapstruct-plus-processor/src/main/resources/io/github/linpeilie/processor/enhance/model/SpringDelayInjectMapperReference.ftl b/mapstruct-plus-processor/src/main/resources/io/github/linpeilie/processor/enhance/model/SpringDelayInjectMapperReference.ftl
index f84aa7d2ad91099d56f00778e58daf4730942ead..6ad6e1b602bf02e7f624e9953ab9be7336f35708 100644
--- a/mapstruct-plus-processor/src/main/resources/io/github/linpeilie/processor/enhance/model/SpringDelayInjectMapperReference.ftl
+++ b/mapstruct-plus-processor/src/main/resources/io/github/linpeilie/processor/enhance/model/SpringDelayInjectMapperReference.ftl
@@ -1,2 +1,2 @@
<#-- @ftlvariable name="" type="io.github.linpeilie.processor.enhance.model.SpringDelayInjectMapperReference" -->
-private <@includeModel object=type/> ${variableName} = SpringContextUtils.getBean("${variableName}", <@includeModel object=type/>.class);
\ No newline at end of file
+private <@includeModel object=type/> ${variableName} = SpringContextUtils4Msp.getBean("${variableName}", <@includeModel object=type/>.class);
\ No newline at end of file
diff --git a/mapstruct-plus-spring-boot-starter/src/main/java/io/github/linpeilie/mapstruct/MapstructAutoConfiguration.java b/mapstruct-plus-spring-boot-starter/src/main/java/io/github/linpeilie/mapstruct/MapstructAutoConfiguration.java
index 28c7a06cb5ac248ac50546dfba2c0dae77962831..cc6bd01a5783d7fbd8161adae5dc03ad16386f71 100644
--- a/mapstruct-plus-spring-boot-starter/src/main/java/io/github/linpeilie/mapstruct/MapstructAutoConfiguration.java
+++ b/mapstruct-plus-spring-boot-starter/src/main/java/io/github/linpeilie/mapstruct/MapstructAutoConfiguration.java
@@ -25,8 +25,8 @@ public class MapstructAutoConfiguration {
}
@Bean
- public SpringContextUtils springContextUtils() {
- return new SpringContextUtils();
+ public static SpringContextUtils4Msp springContextUtils() {
+ return new SpringContextUtils4Msp();
}
}
diff --git a/mapstruct-plus-spring-boot-starter/src/main/java/io/github/linpeilie/mapstruct/SpringContextUtils.java b/mapstruct-plus-spring-boot-starter/src/main/java/io/github/linpeilie/mapstruct/SpringContextUtils4Msp.java
similarity index 89%
rename from mapstruct-plus-spring-boot-starter/src/main/java/io/github/linpeilie/mapstruct/SpringContextUtils.java
rename to mapstruct-plus-spring-boot-starter/src/main/java/io/github/linpeilie/mapstruct/SpringContextUtils4Msp.java
index bdb201aeaa34766a0da493687575cd60026c0b6b..a71f8d682b571362bd53679bf622eaa1117afbed 100644
--- a/mapstruct-plus-spring-boot-starter/src/main/java/io/github/linpeilie/mapstruct/SpringContextUtils.java
+++ b/mapstruct-plus-spring-boot-starter/src/main/java/io/github/linpeilie/mapstruct/SpringContextUtils4Msp.java
@@ -9,20 +9,20 @@ import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ConfigurableApplicationContext;
-public class SpringContextUtils implements BeanFactoryPostProcessor, ApplicationContextAware {
+public class SpringContextUtils4Msp implements BeanFactoryPostProcessor, ApplicationContextAware {
private static ConfigurableListableBeanFactory beanFactory;
private static ApplicationContext applicationContext;
- public SpringContextUtils() {
+ public SpringContextUtils4Msp() {
}
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
- SpringContextUtils.beanFactory = beanFactory;
+ SpringContextUtils4Msp.beanFactory = beanFactory;
}
public void setApplicationContext(ApplicationContext applicationContext) {
- SpringContextUtils.applicationContext = applicationContext;
+ SpringContextUtils4Msp.applicationContext = applicationContext;
}
public static ApplicationContext getApplicationContext() {
diff --git a/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/AutoMapping.java b/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/AutoMapping.java
index 93166fafc68b37b838033cebc4338ab9c0827bb4..69578e823413eb7c2ce7711035a72cc756d538fc 100644
--- a/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/AutoMapping.java
+++ b/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/AutoMapping.java
@@ -18,7 +18,7 @@ import org.mapstruct.control.MappingControl;
import static org.mapstruct.NullValueCheckStrategy.ON_IMPLICIT_CONVERSION;
-@Target({ElementType.FIELD, ElementType.METHOD})
+@Target({ElementType.FIELD, ElementType.METHOD,ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.CLASS)
public @interface AutoMapping {
diff --git a/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/AutoMappings.java b/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/AutoMappings.java
index d8f0cb649c64e7e5336eaa9c5f70d15dc8a3dd12..c7e38cb9d84c8cac5241f3f12236ef858437c66a 100644
--- a/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/AutoMappings.java
+++ b/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/AutoMappings.java
@@ -5,7 +5,7 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-@Target({ElementType.FIELD, ElementType.METHOD})
+@Target({ElementType.FIELD, ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.CLASS)
public @interface AutoMappings {
diff --git a/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/ReverseAutoMapping.java b/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/ReverseAutoMapping.java
index e90bb8b49398cae8a1d6fba8e3ba3cee77b3289f..eb3cdd70d2ed378cc8812eee3e08934f37a753c3 100644
--- a/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/ReverseAutoMapping.java
+++ b/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/ReverseAutoMapping.java
@@ -33,7 +33,7 @@ import static org.mapstruct.NullValueCheckStrategy.ON_IMPLICIT_CONVERSION;
*
* @author linpl
*/
-@Target({ElementType.FIELD, ElementType.METHOD})
+@Target({ElementType.FIELD, ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.CLASS)
public @interface ReverseAutoMapping {
diff --git a/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/ReverseAutoMappings.java b/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/ReverseAutoMappings.java
index 47ea79cd612f58b7a9f2d8c3d64ee773ca1de51e..d5726fd7ba80f32ffcff00ea83e68a0e47077098 100644
--- a/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/ReverseAutoMappings.java
+++ b/mapstruct-plus/src/main/java/io/github/linpeilie/annotations/ReverseAutoMappings.java
@@ -5,7 +5,7 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-@Target(ElementType.FIELD)
+@Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.CLASS)
public @interface ReverseAutoMappings {
diff --git a/pom.xml b/pom.xml
index 0a1543c638988e3328b4e7f0ea9dcacd3d04c2f6..f8b9a75438c41966ba63f64f0b4df795c252d35c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,7 +18,7 @@
- 1.4.5
+ 1.4.6
8
8
UTF-8