我需要在生成的mapper实现中注入(inject)一个spring服务类,这样就可以通过
@Mapping(target="x", expression="java(myservice.findById(id))")"
这适用于 Mapstruct-1.0 吗?
最佳答案
正如 brettanomyces 所说,如果服务不用于表达式以外的映射操作,则不会注入(inject)该服务。
我发现的唯一方法是:
- 将我的映射器接口(interface)转换为抽象类
- 在抽象类中注入(inject)服务
- 使其受到保护,以便抽象类的“实现”可以访问
我正在使用 CDI,但它应该与 Spring 相同:
@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(Object obj);
}
关于spring - Mapstruct - 如何在 Generated Mapper 类中注入(inject) spring 依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38807415/