Java org.springframework.beans.factory.unsatifiedPendencyException,没有[edu.sample.service.ItemService]类型的合格bean
它是spring引导应用程序。我遇到以下异常。如何解决它请帮助我 我的控制器类是Java org.springframework.beans.factory.unsatifiedPendencyException,没有[edu.sample.service.ItemService]类型的合格bean,java,spring,spring-boot,Java,Spring,Spring Boot,它是spring引导应用程序。我遇到以下异常。如何解决它请帮助我 我的控制器类是 import edu.sample.model.Item; import edu.sample.service.ItemService; @ComponentScan(basePackages = "edu.*") @RestController public class ItemController { @Autowired @Qualifier(value="itemService")
import edu.sample.model.Item;
import edu.sample.service.ItemService;
@ComponentScan(basePackages = "edu.*")
@RestController
public class ItemController {
@Autowired
@Qualifier(value="itemService")
private ItemService itemService;
@RequestMapping(value = "/getAllItems", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<Item>> getAllItems() {
List<Item> items = itemService.getAllItems();
return new ResponseEntity<List<Item>>(items, HttpStatus.OK);
}
}
您必须使用限定符“itemService”命名为
ItemServiceImpl
,如下所示:
@Service("itemService")
public class ItemServiceImpl implements ItemService {
...
您必须使用限定符“itemService”命名为
ItemServiceImpl
,如下所示:
@Service("itemService")
public class ItemServiceImpl implements ItemService {
...
默认情况下,Springbean的名称取自类名称,如
itemServiceImpl
的itemServiceImpl
@Service
public class ItemServiceImpl implements ItemService {
/** ... */
}
通过下面的声明,您拥有一个名为itemServiceImpl
的ItemService
类型的bean
@Service
public class ItemServiceImpl implements ItemService {
/** ... */
}
然而,由于您使用的是@Qualifier(value=“itemService”)
,所以您试图根据bean的名称自动连接它ItemController
需要一个名为itemService
的bean,但是spring上下文没有该名称的bean,因此未满足的pendencyException
@ComponentScan(basePackages = "edu.*")
@RestController
public class ItemController {
@Autowired
@Qualifier(value="itemService")
private ItemService itemService;
/* ... */
}
现在,为了解决您的问题,您可以给ItemServiceImpl
bean一个明确的名称,如
@Service("itemService")
public class ItemServiceImpl implements ItemService {
/** ... */
}
另一种方法是通过从
ItemController
中删除@Qualifier
注释,让spring autowireItemService
按其类型而不是名称进行bean。除非spring上下文中有多个类型为ItemService
的bean,否则这种方法工作良好且简单。默认情况下,spring bean的名称取自类名称,如itemServiceImpl
,用于itemServiceImpl
@Service
public class ItemServiceImpl implements ItemService {
/** ... */
}
通过下面的声明,您拥有一个名为itemServiceImpl
的ItemService
类型的bean
@Service
public class ItemServiceImpl implements ItemService {
/** ... */
}
然而,由于您使用的是@Qualifier(value=“itemService”)
,所以您试图根据bean的名称自动连接它ItemController
需要一个名为itemService
的bean,但是spring上下文没有该名称的bean,因此未满足的pendencyException
@ComponentScan(basePackages = "edu.*")
@RestController
public class ItemController {
@Autowired
@Qualifier(value="itemService")
private ItemService itemService;
/* ... */
}
现在,为了解决您的问题,您可以给ItemServiceImpl
bean一个明确的名称,如
@Service("itemService")
public class ItemServiceImpl implements ItemService {
/** ... */
}
另一种方法是通过从
ItemController
中删除@Qualifier
注释,让spring autowireItemService
按其类型而不是名称进行bean。除非在spring上下文中有多个类型为ItemService
的bean,否则这种方法工作得很好,也很简单。它工作得很好,谢谢