java - MapStruct 与 Spring Boot,使用自定义注释来注释生成的类

标签 java spring spring-boot mapstruct spring-profiles

是否有可能使用自定义注释来注释 MapStruct 生成的类?目前我正在使用 MapStruct 和 componentModel定义为"spring" ,例如:

@Mapper(componentModel = "spring")
public interface MyMapper {}

对于这个接口(interface),类是由MapStruct生成的:

@Component
public class MyMapperImpl implements MyMapper {}

所以我可以轻松地注入(inject)它。我想做的是用 org.springframework.context.annotation.Profile 注释生成的类注释,所以我生成的bean只有在定义了特定配置文件时才会生效,是否有可能注入(inject)这样的注释,@Profile("dev") ,以某种方式生成类?我在想org.mapstruct.DecoratedWith注释,但我没有让它为我工作

最佳答案

目前官方 API 无法实现此操作。这个问题类似于mapstruct/mapstruct#1427 .

但是,您可以尝试使用 2 个选项来使其发挥作用。

<小时/>

选项1(注释Mapper)

你可以尝试用@Profile注解来注解MyMapper,我不确定Spring是否会在继承树和接口(interface)中查找

<小时/>

选项 2(使用内部 API)

MapStruct 具有 ModelElementProcessor它用于添加 @Component 注释。 Spring 的那个是SpringComponentModelElementProcessor .

您可以提供自己的 componentModel(例如 spring-dev),它将向生成的映射器添加 @Profile 注释。

关于java - MapStruct 与 Spring Boot,使用自定义注释来注释生成的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54381689/

相关文章:

java - 遇到 Sonar 错误时如何处理TODO注释

java - Spring Batch 在运行步骤之前解析步骤的资源

java - 如何在 Spring Data Rest Application 中创建实体之间的引用

java - 带有 Spring 引导的 JUnit 5 - 如何使用不同的配置文件重复测试?

java - Spring security - authorizerequest()、anyRequest() 和authenticated() 有什么作用?

spring-boot - spring boot 2 + netty + servlet.context-path + 不工作

java - 在不同的 jar 文件中使用 @RestControllerAdvice 不会捕获异常

java - JAVA中如何将String转换成Date时间格式?

java.sql.SQLException : Operation not allowed after ResultSet closed MySQL Java

java - JTextField 的 "column"的宽度是多少?