繁体   English   中英

考虑在您的配置中定义“com.fsse2207.project_backend.service.ProductService”类型的 bean

[英]Consider defining a bean of type 'com.fsse2207.project_backend.service.ProductService' in your configuration

基本上,我已经创建了 Spring 启动所需的所有 pojo 和层(包括存储库层),以自动执行 MySql 命令。 当我尝试运行该程序时,我收到以下命令: 说明:

com.fsse2207.project_backend.api.ProductApi 中的构造函数参数 0 需要找不到类型为“com.fsse2207.project_backend.service.ProductService”的 bean。

行动:

考虑在您的配置中定义“com.fsse2207.project_backend.service.ProductService”类型的 bean。

事实证明,我的 ProductApi 中的 bean 有问题。 它说“无法自动装配。找不到'ProductService'类型的bean。” 我如何解决它?

下面是服务层下的接口:

package com.fsse2207.project_backend.service;

import com.fsse2207.project_backend.data.ProductCreateData;
import com.fsse2207.project_backend.data.ProductDetailData;
import com.fsse2207.project_backend.exception.ProductFoundByIdException;
import org.springframework.stereotype.Service;

public interface ProductService {
    ProductDetailData createProductData (ProductCreateData productCreateData) throws ProductFoundByIdException;
}

以下是服务class:

package com.fsse2207.project_backend.service.impl;

import com.fsse2207.project_backend.data.ProductCreateData;
import com.fsse2207.project_backend.data.ProductDetailData;
import com.fsse2207.project_backend.data.entity.ProductEntity;
import com.fsse2207.project_backend.exception.ProductFoundByIdException;
import com.fsse2207.project_backend.repository.ProductRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class ProductServiceImpl {
    private ProductRepository productRepository;
    @Autowired
    public ProductServiceImpl(ProductRepository productRepository){
        this.productRepository=productRepository;
    }
    public ProductDetailData createProductData (ProductCreateData productCreateData) throws ProductFoundByIdException {
        ProductEntity productEntity=new ProductEntity(productCreateData);
        if(productRepository.existsById(productEntity.getpId())){
            throw new ProductFoundByIdException();
        }
        return new ProductDetailData(productRepository.save(productEntity));
    }
}

以下是Api:

package com.fsse2207.project_backend.api;

import com.fsse2207.project_backend.data.ProductCreateData;
import com.fsse2207.project_backend.data.ProductDetailData;
import com.fsse2207.project_backend.data.dto.CreateRequestDto;
import com.fsse2207.project_backend.data.dto.CreateResponseDto;
import com.fsse2207.project_backend.exception.ProductFoundByIdException;
import com.fsse2207.project_backend.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ProductApi {
    private ProductService productService;
    @Autowired
    public ProductApi(ProductService productService){
        this.productService=productService;
    }
    @PostMapping
    public CreateResponseDto createResponseDto(@RequestBody CreateRequestDto createRequestDto) throws ProductFoundByIdException {
        ProductCreateData productCreateData=new ProductCreateData(createRequestDto);
        ProductDetailData productDetailData =productService.createProductData(productCreateData);
        return new CreateResponseDto(productDetailData);
    }
}

首先,您不应该为 ProductService 接口添加注释@Service 此外,当您将 Class Application放在“另一个包”中时,可能会发生这种情况。 您可以使用注释@ComponentScan (basePackages = {"your.company.domain.package"})解决问题

我发现了问题。 我没有在 ProductServiceImpl 之后添加“实现”,所以它没有连接到 bean,也就是接口,也就是服务层。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM