【问题标题】:No qualifying bean of type AbstractRepository<?>' available: expected single matching bean but found 2没有可用的 AbstractRepository<?>' 类型的合格 bean:预期的单个匹配 bean 但找到了 2
【发布时间】:2018-02-08 00:34:20
【问题描述】:

我正在使用 spring-boot 来实现一些 rest-endpoint。我已经实现了一个 AbstractRepository 和一个带有 @Autowired 的 AbstractEnpoint。然后两者都由真正的 2 个端点扩展:ClientEndpoint 和 HospitalReservationListEndpoint。 但是当我尝试调用 Endpoints 中需要存储库的方法时,我在浏览器中收到以下错误:

"org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'org.parcaune.reservationmanagerservices.core.AbstractRepository&lt;?&gt;' available: expected single matching bean but found 2: clientRepository,hospitalReservationListRepository"

我的课程:

我的抽象存储库

/*
@NoRepositoryBean
Annotation to exclude repository interfaces from being picked up
and thus in consequence getting an instance being created
*/

@NoRepositoryBean
public interface AbstractRepository<T> extends JpaRepository<T, String> 
{
}

我的抽象端点

public abstract class AbstractEndpoint<T> {

  @Autowired
  protected AbstractRepository<T> repository;

  @GET
  @Path("/ping")
  @Produces(MediaType.TEXT_PLAIN)
  public String ping() {
    return "Endpoint works!";
  }

  @GET
  @Produces(MediaType.APPLICATION_JSON)
  public List<T> getAll() {
    List<T> list = new ArrayList<>();
    list = repository.findAll();
    return list;
  }
}

我的客户类:

public interface ClientRepository extends AbstractRepository<Client> {
}

@Component
@Path("/clients")
public class ClientEndpoint extends AbstractEndpoint<Client> {
}

我的医院课程

public interface HospitalReservationListRepository extends 
AbstractRepository<HospitalReservationList> {
}

@Component
@Path("/hospitalreservationlist")
public class HospitalReservationListEndpoint extends 
AbstractEndpoint<HospitalReservationList> {
}

【问题讨论】:

    标签: java spring rest spring-mvc spring-boot


    【解决方案1】:

    简单的方法是将存储库添加为通用参数,如下所示:

    public abstract class AbstractEndpoint<T,R extends AbstractRepository<T>> {
    
      @Autowired
      protected R repository;
    
    ...
    

    我希望有更好的方法来做到这一点,如果你能找到,请在这里评论。

    【讨论】:

    • 像你一样改代码后出现同样的错误
    • 我记得当我们尝试使用 Eclipse 运行应用程序时遇到该错误的情况,但是当我们使用 mvn spring-boot:run 运行它时,我们没有遇到任何问题。尝试使用 mvn spring-boot:run 运行它也许有助于找到问题。
    • 我再次遇到同样的错误
    • 另一个想法,我不确定这是否重要,但我总是使用@Autowired 构造函数或设置器。你试过这样吗?
    猜你喜欢
    • 2019-04-08
    • 1970-01-01
    • 2018-10-05
    • 2017-12-11
    • 2021-06-14
    • 2019-08-06
    • 1970-01-01
    • 2015-02-01
    • 1970-01-01
    相关资源
    最近更新 更多