我需要在產生映射器實現注入彈簧服務類,這樣我可以通過Mapstruct - 我怎樣才能注入在生成的映射器類彈簧依賴
@Mapping(target="x", expression="java(myservice.findById(id))")"
使用它這是適用於Mapstruct -1.0?
我需要在產生映射器實現注入彈簧服務類,這樣我可以通過Mapstruct - 我怎樣才能注入在生成的映射器類彈簧依賴
@Mapping(target="x", expression="java(myservice.findById(id))")"
使用它這是適用於Mapstruct -1.0?
如果聲明Spring作爲組件模型和添加引用的myservice
類型應該是可能的:
@Mapper(componentModel="spring", uses=MyService.class)
public interface MyMapper { ... }
也就是說機構是指用於提供訪問其他的映射方法,以通過生成的代碼被稱爲,但你也應該能夠在表達式中使用它們。只要確保您使用服務引用生成的字段的正確名稱。
正如brettanomyces所述,如果服務不用於除表達式之外的映射操作,則服務將不會被注入。
,我發現這個問題的唯一辦法是:
我使用CDI,但它應該與春季samel:
@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);
}
我有同樣的問題,看來用'使用'聲明的類將只有自動裝配,如果他們的方法之一用作源 - >目標映射,所以如果他們的唯一用途是在表達式中,他們將* not * get autowired –
啊,如果你只*想在表達式中使用它,這是一個有趣的點。你可以在[我們的追蹤器](https://github.com/mapstruct/mapstruct/issues)中打開一個問題嗎?謝謝! – Gunnar