是春季启动应用程序。我得到以下异常。请解决它,请帮助我 我的Controller类是
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);
}
}
服务类是
@Service
public class ItemServiceImpl implements ItemService {
@Autowired
ItemDAO itemDAO;
@Override
public String addItem(Item item) {
return itemDAO.addItem(item);
}
@Override
public String deleteItem(Integer id) {
return itemDAO.deleteItem(id);
}
@Override
public void updateItem(Item item) {
}
@Override
public List<Item> getAllItems() {
return itemDAO.getAllItems();
}
}
和DAO班
@Resource
public class ItemDAOImpl implements ItemDAO {
@PersistenceContext
EntityManager entityManager;
@Override
public String addItem(Item item) {
entityManager.persist(item);
return item.getName();
}
@Override
public String deleteItem(Integer id) {
String name=entityManager.find(Item.class, id).getName();
entityManager.remove(id);
return name;
}
@Override
public void updateItem(Item item) {
}
@Override
public List<Item> getAllItems() {
return entityManager.createQuery("from Item").getResultList();
}
}
我收到此异常消息:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'itemController': Unsatisfied dependency expressed through field 'itemService': No qualifying bean of type [edu.sample.service.ItemService] found for dependency [edu.sample.service.ItemService]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true), @org.springframework.beans.factory.annotation.Qualifier(value=itemService)}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [edu.sample.service.ItemService] found for dependency [edu.sample.service.ItemService]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true), @org.springframework.beans.factory.annotation.Qualifier(value=itemService)}
答案 0 :(得分:1)
您必须使用您的限定符ItemServiceImpl
命名"itemService"
,如下所示:
@Service("itemService")
public class ItemServiceImpl implements ItemService {
...
答案 1 :(得分:1)
默认情况下,spring bean的名称取自itemServiceImpl
的{{1}}类名称。
使用以下声明,您有一个名为ItemServiceImpl
的{{1}}类型的bean。
ItemService
但是,由于您正在使用itemServiceImpl
,因此您尝试按名称自动装配bean。 @Service
public class ItemServiceImpl implements ItemService {
/** ... */
}
需要一个名为@Qualifier(value="itemService")
的bean,但spring上下文没有带有该名称的bean,因此ItemController
。
itemService
现在,要解决您的问题,您可以为UnsatisfiedDependencyException
bean指定一个明确的名称,如
@ComponentScan(basePackages = "edu.*")
@RestController
public class ItemController {
@Autowired
@Qualifier(value="itemService")
private ItemService itemService;
/* ... */
}
另一种方法是通过从ItemServiceImpl
中删除@Service("itemService")
public class ItemServiceImpl implements ItemService {
/** ... */
}
注释,让spring通过它的类型而不是名称来自动装配ItemService
bean。除非在spring上下文中有多个@Qualifier
类型的bean,否则这种方法很好并且很简单。