我试图通过引用此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。