错误:没有找到符合条件的依赖项

Posted

技术标签:

【中文标题】错误:没有找到符合条件的依赖项【英文标题】:Error : No qualifying bean found for dependency 【发布时间】:2017-08-12 11:14:32 【问题描述】:

我使用 spring mvc 4 开发了一个 Web 应用程序。对于 DAO 层,我添加了一个 GenericDAO 类:`public class GenericDAO

@PersistenceContext
private EntityManager entityManager;

private Class<T> parametrizedType;

public GenericDAO(Class<T> parametrizedType) 
    this.parametrizedType = parametrizedType;


public EntityManager getEntityManager() 
    return entityManager;


public List<T> executeQuery(String query)
    TypedQuery<T> typedQuery = entityManager.createQuery(query, parametrizedType);
    List<T> result = typedQuery.getResultList();
    return result;


public List<T> listAll()
    List<T> result = getEntityManager().createQuery("Select t From " + parametrizedType.getSimpleName() + " t", parametrizedType).getResultList();
    return result;


public T getById(Object id)
    return getEntityManager().find(parametrizedType, id);


@SuppressWarnings("unchecked")
public List<T> executeNativeQuery(String query)
    List<T> result = entityManager.createNativeQuery(query, parametrizedType).getResultList();
    return result;


public List<T> executeNamedQuery(String query)
    List<T> result = entityManager.createNamedQuery(query, parametrizedType).getResultList();
    return result;


@Transactional
public void save(T entity)
    entityManager.persist(entity);


@Transactional
public void modify(T entity)
    entityManager.merge(entity);


@Transactional
public T find(Object id)
    if(id!=null)
        return entityManager.find(this.parametrizedType, id);
    
    return null;


@Transactional
public void delete(Object id)
    T t = find(id);
    if(t!=null)
        entityManager.remove(t);
    

`

像下面这样声明我的 DAO 在启动我的应用程序时会产生错误:

@Autowired
@Qualifier(value="partenaireDao")
private GenericDAO<VscPartenaire> partenaireDao;

错误是:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean found for dependency ....: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: @org.springframework.beans.factory.annotation.Autowired(required=true), @org.springframework.beans.factory.annotation.Qualifier(value=partenaireDao)

在 org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1463) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1094) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1056) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:566)

但没关系:

@Repository("partenaireDao")

公共类 PartenaireDao 扩展 GenericDAO

public PartenaireDao() 
    super(VscPartenaire.class);

你能告诉我我的第一个声明有什么问题吗? 我不想为每个实体创建 dao。

谢谢

【问题讨论】:

【参考方案1】:

你能告诉我我的第一个声明有什么问题吗?

没有注释 genericDao 类,所以该类没有被 spring 实例化。

我不想为每个实体创建 dao。

然后将@Repository("partenaireDao") 添加到GenericDao 类中。

【讨论】:

感谢回复,即使我将@Repository 添加到 GenericDAO,我也有同样的错误 @Repository public class GenericDAO @PersistenceContext private EntityManager entityManager; ..... 我读过,我不明白,如果我将@Repository("partenaireDao") 添加到 GenericDao 类中,其他实体呢?

以上是关于错误:没有找到符合条件的依赖项的主要内容,如果未能解决你的问题,请参考以下文章

没有为依赖找到符合条件的 bean

@Autowired - 没有为依赖找到符合条件的 bean

Scala构建没有找到依赖项

没有为依赖找到类型 [org.hibernate.SessionFactory] ​​的匹配 bean

依赖注入

有没有办法有条件地#define 依赖项中的符号?