Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Springbean与Mapstruct的静态实例模式_Java_Spring_Spring Boot_Dependency Injection_Mapstruct - Fatal编程技术网

Java 使用Springbean与Mapstruct的静态实例模式

Java 使用Springbean与Mapstruct的静态实例模式,java,spring,spring-boot,dependency-injection,mapstruct,Java,Spring,Spring Boot,Dependency Injection,Mapstruct,我知道您可以使用注释@Mapper(componentModel=“spring”)来使用spring管理/注入映射器依赖项。我的问题是,与在mapper类本身中声明实例变量相比,这种方法是否有任何优势: @Mapper public interface SomeMapper { SomeMapper INSTANCE = Mappers.getMapper(SomeMapper.class); SomethingElse mapSomethingToSomethingElse

我知道您可以使用注释
@Mapper(componentModel=“spring”)
来使用spring管理/注入映射器依赖项。我的问题是,与在mapper类本身中声明实例变量相比,这种方法是否有任何优势:

@Mapper
public interface SomeMapper {
    SomeMapper INSTANCE = Mappers.getMapper(SomeMapper.class);

    SomethingElse mapSomethingToSomethingElse(Something something);
}

...

// Clients using mapper
SomethingElse result = SomeMapper.INSTANCE.mapSomethingToSomethingElse(input);

当使用Spring依赖注入来注入映射器时,您最终会添加额外的构造函数参数/实例字段,这是可取的,因为它使类开始依赖太多的依赖项,并且很可能需要重构(例如,想想Sonar的规则)

另一个优点是,由于您将映射器注册为Spring上下文中的bean,因此可以利用框架功能轻松地在映射器中注入依赖项,通过在运行时自定义所有映射器,并依赖所有其他看起来合适的框架抽象

我想说,既然您已经在应用程序中使用了Spring,那么几乎没有理由不将映射器注册为Springbean并以DI方式注入它们,而不是将它们转换为静态UTIL