对于Mapsruct类以及@Service类,没有@Autowired

问题描述 投票:0回答:1

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

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

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

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服务层也一样吗?

java spring dependency-injection autowired mapstruct
1个回答
0
投票

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

因此,总之之所以发生依赖项注入,是因为发生了@Autowired效果,并且在这种情况下,注释本身被省略了。

检查文档here

© www.soinside.com 2019 - 2024. All rights reserved.