使用Spring Boot的MapStruct,使用自定义注释对生成的类进行注释

时间:2019-01-26 18:56:34

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

是否可以使用自定义注释来注释由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注释,但没有使它对我有用

1 个答案:

答案 0 :(得分:0)

当前使用官方API无法实现。这个问题类似于mapstruct/mapstruct#1427

但是,您可以尝试使用2个选项来使其正常工作。


选项1(注释映射器)

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


选项2(使用内部API)

MapStruct具有ModelElementProcessor,用于添加@Component批注。用于Spring的是SpringComponentModelElementProcessor

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