MapStruct с Spring Boot, аннотировать сгенерированные классы с помощью пользовательских аннотаций - PullRequest
0 голосов
/ 26 января 2019

Есть ли возможность аннотировать класс, сгенерированный MapStruct, с помощью пользовательской аннотации? В настоящее время я использую MapStruct с componentModel, определенным как "spring", например:

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

Для этого интерфейса класс генерируется MapStruct:

@Component
public class MyMapperImpl implements MyMapper {}

Так что я могу легко ввести его. Я хочу аннотировать сгенерированный класс аннотацией org.springframework.context.annotation.Profile, поэтому мой сгенерированный компонент будет действовать только в том случае, если определен конкретный профиль, есть ли возможность каким-либо образом внедрить такую ​​аннотацию @Profile("dev") в сгенерированный класс? Я думал о org.mapstruct.DecoratedWith аннотации, но у меня не получилось, чтобы она работала для меня

1 Ответ

0 голосов
/ 27 января 2019

В настоящее время это невозможно с официальным API.Этот вопрос похож на mapstruct / mapstruct # 1427 .

Однако есть 2 варианта, которые вы можете попробовать заставить его работать.


Вариант 1 (annotate Mapper)

Вы можете попытаться аннотировать MyMapper с помощью аннотации @Profile, я не уверен, ищет ли Spring дерево наследования и в интерфейсе или нет


Option2 (используйте внутренний API)

MapStruct имеет ModelElementProcessor, который использовался для добавления аннотации @Component.Для Spring это SpringComponentModelElementProcessor.

Вы можете предоставить свой собственный componentModel (например, spring-dev), который добавит аннотацию @Profile к сгенерированному преобразователю.

...