2016-08-26 12 views
0

春のブートアプリケーションです。私はそれが私を助けてください解決exception.howの下に取得しています 私のコントローラクラスはorg.springframework.beans.factory.UnsatisfiedDependencyException、型[edu.sample.service.ItemService]の修飾Beanがありません

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); 
    } 
} 

サービスクラスが

@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(); 
    } 

} 

が、私はこの例外メッセージを取得

@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クラスであります:

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

あなたはこのようなあなたの予選"itemService"ItemServiceImplという名前のためにする必要があります。デフォルトでは

@Service("itemService") 
public class ItemServiceImpl implements ItemService { 
    ... 
+0

うまく動作しました。ありがとう –

0

、春のBeanの名前はItemServiceImplためitemServiceImplのようなクラス名から取られています。

次の宣言では、名前がitemServiceImplItemServiceのBeanがあります。しかし

@Service 
public class ItemServiceImpl implements ItemService { 
/** ... */ 
} 

、あなたが@Qualifier(value="itemService")を使用しているので、あなたはそれの名前でBeanをautowireしようとしています。 ItemControllerには名前がitemServiceのBeanが必要ですが、スプリングコンテキストにはその名前のBeanがないため、UnsatisfiedDependencyExceptionというBeanはありません。今

@ComponentScan(basePackages = "edu.*") 
@RestController 
public class ItemController { 

    @Autowired 
    @Qualifier(value="itemService") 
    private ItemService itemService; 
    /* ... */ 
} 

、あなたの問題を解決するために、あなたはItemServiceImpl豆に

@Service("itemService") 
public class ItemServiceImpl implements ItemService { 
/** ... */ 
} 

のような明示的な名前を付けることができますいずれかのもう一つの方法は、それによってスプリングautowire ItemService Beanは削除することではなく、名前よりも、型のようにすることです@Qualifier注釈:ItemController。このアプローチはうまく動作し、春の文脈でタイプがItemServiceの複数のBeanが存在しない限り簡単です。

関連する問題