spring - Mapstruct - 如何在 Generated Mapper 类中注入(inject) spring 依赖项

标签 spring mapstruct

我需要在生成的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/

相关文章:

java - Spring MVC 表单 :errors not displaying error

java - 如何使用Spring云总线刷新应用程序实例以及不受配置服务器控制的数据?

java - Mapstruct:使用加法器时清除更新集合

java - MapStruct Junit - 使用 CDI 注入(inject)内部映射器

java - MapStruct 实现在 Spring Boot Web 应用程序中不起作用

java - 同时使用 PropertyPlaceholderConfigurer 和 PropertySource

java - 在 Spring 中用另一个 Controller 重置 Controller

java - 显式调用 SpringBoot 提供的默认 Spring 缓存管理器

java - MapStruct继承,不止一个配置原型(prototype)是application

java - 在 mapstruct 中使用构建器(使用不可变注释处理器)将对象映射到不可变对象(immutable对象)