Как прокомментировал brettanomyces, служба не будет введена, если она не используется в операциях сопоставления, отличных от выражений.
Единственный способ я нашел это:
- Transform мой интерфейс сопоставителя в абстрактный класс
- Вводить службу в абстрактном классе
- Сделать это защищало так что «осуществления» абстрактный класс имеет доступ
я использую CDI, но это должно быть плохо обожженный с весной:
@Mapper(
unmappedTargetPolicy = org.mapstruct.ReportingPolicy.IGNORE,
componentModel = "spring",
uses = {
// My other mappers...
})
public abstract class MyMapper {
@Autowired
protected MyService myService;
@Mappings({
@Mapping(target="x", expression="java(myservice.findById(obj.getId()))")")
})
public abstract Dto myMappingMethod(obj);
}
У меня такая же проблема, и кажется, что классы, объявленные с помощью 'uses', будут только автообновлены, если один из их методов используется в качестве целевого сопоставления source->, поэтому, если их использование будет только в выражении, то они будут * not * get autowired –
А, это интересный момент, если вы * только * хотите использовать его в выражении. Не могли бы вы открыть проблему в нашем трекере (https://github.com/mapstruct/mapstruct/issues)? Благодаря! – Gunnar