Java 字段需要找不到类型为的bean
我是一名SpringBoot学习者,所以我一直在尝试创建一些基本的SpringBoot应用程序。我试图运行开发的应用程序时出错 我犯的错误是 [![ StoreApiAPP.java:Java 字段需要找不到类型为的bean,java,spring-boot,Java,Spring Boot,我是一名SpringBoot学习者,所以我一直在尝试创建一些基本的SpringBoot应用程序。我试图运行开发的应用程序时出错 我犯的错误是 [![ StoreApiAPP.java: package io.ajithan.springbootstarter; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication
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;
}
}
package io.ajithan.springbootstarter.model;
public class ItemResponse {
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
private String message;
}
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);
}
}
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;
}
}
ItemResponse.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;
}
}
package io.ajithan.springbootstarter.model;
public class ItemResponse {
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
private String message;
}
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);
}
}
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;
}
}
StoreController.java:[包名:io.ajithan.springbootstarter.controller]
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;
}
}
package io.ajithan.springbootstarter.model;
public class ItemResponse {
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
private String message;
}
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);
}
}
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;
}
}
包io.ajithan.springbootstarter.controller;
导入java.util.List;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.web.bind.annotation.PathVariable;
导入org.springframework.web.bind.annotation.RequestBody;
导入org.springframework.web.bind.annotation.RequestMapping;
导入org.springframework.web.bind.annotation.RequestMethod;
导入org.springframework.web.bind.annotation.RestController;
导入io.ajithan.springbootstarter.model.ItemDetails;
导入io.ajithan.springbootstarter.model.ItemResponse;
导入io.ajithan.springbootstarter.service.StoreService;
@RestController
公共类存储控制器{
@自动连线
私人商店服务;
@请求映射(“/getAllItems”)
公共列表getItemDetailsList(){
return storeService.getItemDetails();
}
@RequestMapping(“/getSingleItem/{idNumber}”)
public ItemDetails getSingleItem(@PathVariable(“idNumber”)整数id){
return storeService.getSingleItem(id);
}
@RequestMapping(method=RequestMethod.POST,value=“/addItem”)
public ItemResponse addSingleItem(@RequestBody ItemDetails ItemDetails){
return storeService.addSingleItem(itemDetails);
}
}
StoreService.java:[包名:io.ajithan.springbootstarter.service]
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;
}
}
package io.ajithan.springbootstarter.model;
public class ItemResponse {
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
private String message;
}
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);
}
}
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;
}
}
包io.ajithan.springbootstarter.service;
导入java.util.ArrayList;
导入java.util.array;
导入java.util.List;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.stereotype.Service;
导入io.ajithan.springbootstarter.model.ItemDetails;
导入io.ajithan.springbootstarter.model.ItemResponse;
@服务
公共类存储服务{
@自动连线
私有项响应项响应;
private List itemDetailsList=新建ArrayList(Arrays.asList(
新项目详情(1,“5Rs GOODDAY饼干”,5.00,“甜食”),
新项目详情(2,“10Rs GOODAY饼干”,10.00,“咸”),
新项目详情(3,“25卢比古德饼干”,25.00,“奶油”)
));
公共列表getItemDetails()
{
返回itemDetailsList;
}
public ItemDetails getSingleItem(整数id){
返回itemDetailsList.stream().filter(n->n.getItemId().equals(id)).findFirst().get();
}
public ItemResponse addSingleItem(ItemDetails ItemDetails){
itemDetailsList.add(itemDetails);
setMessage(“项目添加成功”);
返回项目响应;
}
}
有人能给我这个问题的解决方案吗?您必须在应用程序中定义ItemResponse bean: 首先在ItemResponse类中添加@Component符号,如下所示:
@Component
public class ItemResponse {
private String message;
//** Default Constructor
public ItemResponse() {
}
//** getter and setter
}
在类配置的某个地方,您必须告诉spring ItemResponse是一个需要注入的bean。如果您有一个带有@configuration符号的类,则声明您的bean,否则创建一个配置类,例如在名为“config”的包中:
别忘了在bean中放一个默认构造函数。祝你好运!在这种情况下,自动连接
项响应是非常危险的
默认情况下,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;
}
}
@服务
公共类存储服务{
private List itemDetailsList=新建ArrayList(Arrays.asList(
新项目详情(1,“5Rs GOODDAY饼干”,5.00,“甜食”),
新项目详情(2,“10Rs GOODAY饼干”,10.00,“咸”),
新项目详情(3,“25卢比古德饼干”,25.00,“奶油”)
));
公共列表getItemDetails()
{
返回itemDetailsList;
}
public ItemDetails getSingleItem(整数id){
返回itemDetailsList.stream().filter(n->n.getItemId().equals(id)).findFirst().get();
}
public ItemResponse addSingleItem(ItemDetails ItemDetails){
itemDetailsList.add(itemDetails);
ItemResponse ItemResponse=新的ItemResponse();
setMessage(“项目添加成功”);
返回项目响应;
}
}
当然可以。您需要为每个API响应创建一个新的ItemResponse。因此,它不能自动连接,它应该是一个局部变量,而不是一个实例变量。请这样做。(如果您有理由这样做,它可以自动连接,并且它是有意义的。您没有理由这样做,也没有意义,所以不要这样做)是否有可能提供最简单、更精确的代码部分来重现他的问题?同意@kumesana,如果Autowired没有注释为组件/服务…,则不能使用Autowired,并且响应对象不应该是实例变量,除非它是缓存值,每个请求都会得到相同的值e、 那么,你能解释一下我什么时候可以使用@Component注释吗?不要。他应该删除autowired字段,然后在方法内部构造一个新实例。否则,一个实例将在