【问题标题】:MapStruct with Spring Boot, annotate generated classes with custom annotationMapStruct 与 Spring Boot,使用自定义注解对生成的类进行注解
【发布时间】:2019-01-26 18:56:34
【问题描述】:

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

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

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

@Component
public class MyMapperImpl implements MyMapper {}

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

【问题讨论】:

    标签: java spring spring-boot mapstruct spring-profiles


    【解决方案1】:

    目前官方 API 无法做到这一点。这个问题类似于mapstruct/mapstruct#1427

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


    选项 1(注解映射器)

    您可以尝试使用@Profile 注释来注释MyMapper,我不确定Spring 是否在接口中搜索继承树


    选项 2(使用内部 API)

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

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

    【讨论】:

    • 选项 1 不起作用,因为 @Profile 仅排除 bean,而 MyMapper 不是 bean
    • 我知道,但我不确定 Spring 是否会检查继承中的注释。你试过了吗?
    猜你喜欢
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 2011-06-13
    • 2013-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多