[英]Consider defining a bean of type 'com.ensat.services.ProductService' in your configuration
[英]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.