当前位置: 首页 > 知识库问答 >
问题:

字段需要找不到类型的bean

王辉
2023-03-14

我是一名spring boot学习者,所以我一直在尝试创建一些基本的spring boot应用程序。我试图运行开发的应用程序时出错。

我的错误是[[https://i.stack.imgur.com/oyQDi.png][1]][1]

java:

package io.ajithan.springbootstarter;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan({"io.ajithan.springbootstarter"})
public class StoreApiAPP {

    public static void main(String[] args) {
        SpringApplication.run(StoreApiAPP.class, args);

    }

}

ItemDetails.java:[软件包名称:io.ajithan.springbootstarter.model]

package io.ajithan.springbootstarter.model;


public class ItemDetails {
    private Integer itemId;
    private String itemName;
    private Double itemPrice;
    private String itemCategory;

    public ItemDetails() {

    }

    public ItemDetails(Integer itemId, String itemName, Double itemPrice, String itemCategory) {
        this.itemId = itemId;
        this.itemName = itemName;
        this.itemPrice = itemPrice;
        this.itemCategory = itemCategory;
    }


    public Integer getItemId() {
        return itemId;
    }
    public void setItemId(Integer itemId) {
        this.itemId = itemId;
    }
    public String getItemName() {
        return itemName;
    }
    public void setItemName(String itemName) {
        this.itemName = itemName;
    }
    public Double getItemPrice() {
        return itemPrice;
    }
    public void setItemPrice(Double itemPrice) {
        this.itemPrice = itemPrice;
    }
    public String getItemCategory() {
        return itemCategory;
    }
    public void setItemCategory(String itemCategory) {
        this.itemCategory = itemCategory;
    }

}

ItemResponse.java:[软件包名称:io.ajithan.springbootstarter.model]

package io.ajithan.springbootstarter.model;

public class ItemResponse {
public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

private String message;
}

StoreController。java:[包名:io.ajithan.springbootstarter.controller]

package io.ajithan.springbootstarter.controller;


import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import io.ajithan.springbootstarter.model.ItemDetails;
import io.ajithan.springbootstarter.model.ItemResponse;
import io.ajithan.springbootstarter.service.StoreService;

@RestController
public class StoreController {
    @Autowired
    private StoreService storeService; 

    @RequestMapping("/getAllItems")
    public List<ItemDetails> getItemDetailsList(){
        return storeService.getItemDetails();
    }

    @RequestMapping("/getSingleItem/{idNumber}")
    public ItemDetails getSingleItem(@PathVariable("idNumber") Integer id) {
        return storeService.getSingleItem(id);
    }

    @RequestMapping(method=RequestMethod.POST,value="/addItem")
    public ItemResponse addSingleItem(@RequestBody ItemDetails itemDetails) {
        return storeService.addSingleItem(itemDetails);
    }


}

商店ervice.java:[软件包名称:io.ajithan.springbootstarter.service]

package io.ajithan.springbootstarter.service;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import io.ajithan.springbootstarter.model.ItemDetails;
import io.ajithan.springbootstarter.model.ItemResponse;

@Service
public class StoreService {

    @Autowired
    private ItemResponse itemResponse;

    private List<ItemDetails> itemDetailsList = new ArrayList<>(Arrays.asList(
            new ItemDetails(1,"5Rs GOODDAY Biscuit",5.00,"SWEET"),
            new ItemDetails(2,"10Rs GOODAY Biscuit,",10.00,"SALTY"),
            new ItemDetails(3,"25Rs GOODAY Biscuit",25.00,"CREAMY")
            ));
    public List<ItemDetails> getItemDetails()
    {
        return itemDetailsList;
    }
    public ItemDetails getSingleItem(Integer id) {
        return itemDetailsList.stream().filter(n->n.getItemId().equals(id)).findFirst().get();
    }

    public ItemResponse addSingleItem(ItemDetails itemDetails) {
        itemDetailsList.add(itemDetails);
        itemResponse.setMessage("Item added successfully");
        return itemResponse;
    }

}

有人能给我这个问题的解决方案吗?

共有2个答案

郤瀚
2023-03-14

您必须在应用程序中定义ItemACK bean:

首先在ItemACK类中添加@Component表示法,如下所示:

@Component
public class ItemResponse {
    private String message;

    //** Default Constructor 
    public ItemResponse() {
    }

    //** getter and setter
}

在类配置的某个地方,您必须告诉spring ItemResponse是一个需要注入的bean。如果您有一个带有@配置符号的类,请声明bean,否则创建一个配置类,例如在名为“config”的包中:

@Configuration
public class AppConfig {

    @Bean
    public ItemResponse itemResponse() {
        return new ItemResponse() ;
    }

}

不要忘记在bean中放置默认构造函数。祝你好运

凌嘉勋
2023-03-14

在这种情况下,自动连接项目响应(ItemResponse)没有任何意义,实际上很危险。

默认情况下,Spring中的bean是单例的,所以现在只有一个ItemResponse的实例。现在想象一下,50个并发线程更改了ItemResponse的单个实例,您认为每个线程将有什么输出?

在您的情况下,唯一正确的解决方案是删除autowired字段,只需在addSingleItem方法中构造一个新的ItemResponse并返回它。这样就没有共享状态。

@Service
public class StoreService {

    private List<ItemDetails> itemDetailsList = new ArrayList<>(Arrays.asList(
            new ItemDetails(1,"5Rs GOODDAY Biscuit",5.00,"SWEET"),
            new ItemDetails(2,"10Rs GOODAY Biscuit,",10.00,"SALTY"),
            new ItemDetails(3,"25Rs GOODAY Biscuit",25.00,"CREAMY")
            ));

    public List<ItemDetails> getItemDetails()
    {
        return itemDetailsList;
    }
    public ItemDetails getSingleItem(Integer id) {
        return itemDetailsList.stream().filter(n->n.getItemId().equals(id)).findFirst().get();
    }

    public ItemResponse addSingleItem(ItemDetails itemDetails) {
        itemDetailsList.add(itemDetails);
        ItemResponse itemResponse = new ItemResponse();
        itemResponse.setMessage("Item added successfully");
        return itemResponse;
    }
}

 类似资料:
  • 结构没有问题。spring boot可以扫描UserMapper,但不能扫描UserService。我试着给我的UserService@Mapper组件,然后它就可以被扫描了。但我不知道如何使用其他方法进行扫描。我尝试了@服务,但不起作用。

  • 我是Spring新来的,所以我有一个这样的问题:描述: 字段templateEngine在com.diet4you。拉普科·叶卡捷琳娜。MailComponent需要找不到类型org.thymeleaf.TemplateEngine的bean。 注入点具有以下注释:-@org。springframework。豆。工厂注释。自动连线(必需=真) 已找到以下候选项,但无法注入:-“ThymeleafA

  • 我有一个java项目,它将Spring Boot与JPA结合使用,并将Hibernate用于数据库。我正在尝试建立一个访问数据库的微服务。(我不熟悉微服务和Spring Boot)。 以下是主要课程: IGmCircularsDAO. class: GMCircularsDAOImpl。类别: ParentDAO。班 循环服务。班 当我运行这段代码时,我遇到了以下错误,我已经陷入其中一段时间了。

  • 我是spring boot的新手,一直在尝试制作简单的REST web应用程序。我遵循了不同指南中所示的步骤,但当我尝试运行应用程序时,仍然会遇到同样的问题。 这是我每次尝试运行代码时看到的输出 项目类别:

  • 问题内容: 每当启动应用程序spring启动时,我都会收到以下错误。 申请开始失败 描述: com.base.model.AbstractDao中的现场会话需要找不到“ org.hibernate.SessionFactory”类型的Bean。 行动: 考虑在配置中定义类型为“ org.hibernate.SessionFactory”的bean。 我添加了我的应用程序的实现: POM.xml 应

  • 我已经提到了为什么在Spring Boot期间找不到bean?和“字段需要找不到类型的bean。”使用mongodb的spring restful API出错 CustomerService只是一个接口,充当CustomerController和CustomerService实施之间的中间人,它实际上在CustomerRepository的帮助下对数据库执行操作。 我正在尝试从MYSQL数据库中检