我试图通过引用此blog将MapStruct用于DTO到Entity(Product)的映射,反之亦然。

├── product
   ├── Product.java
   ├── ProductAPI.java
   ├── ProductDTO.java
   ├── ProductMapper.java
   ├── ProductRespository.java
   └── ProductService.java


在控制器中,我看不到@Autowired表示productService(@ Service)和productMapper(@ Mapper)。

import java.util.List;
import java.util.Optional;


import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@Slf4j
@RequiredArgsConstructor

@RestController
@RequestMapping("/products")
public class ProductAPI {
    private final ProductService productService;
    private final ProductMapper productMapper;

    @GetMapping
    public ResponseEntity<List<ProductDTO>> findAll() {
        return ResponseEntity.ok(productMapper.toProductDTOs(productService.findAll()));
    }

    @PostMapping
    public ResponseEntity<ProductDTO> create(@RequestBody ProductDTO productDTO) {
        productService.save(productMapper.toProduct(productDTO));

        return ResponseEntity.status(HttpStatus.CREATED).body(productDTO);
    }
}


我想知道为什么MapStruct类(即prodcutMapper)没有依赖注入。

是因为Mapstruct框架负责在控制器层调用自身吗? @Service服务层也一样吗?

最佳答案

如果Bean具有一个构造函数(在您的情况下由@RequiredArgsConstructor提供),Spring允许您省略@Autowired批注。

简而言之,发生依赖注入是因为发生了@Autowired效果,并且在这种情况下省略了注释本身。

检查文档here

07-24 09:38
查看更多