如何通过在配置文件中添加bean来解决“找不到特定类型的bean”的问题

问题描述 投票:0回答:1

我对 Spring Boot 和 Bean 概念很陌生。我有一些如下所示的课程:

public class PersonController {
  private final AuditService<Person> auditService;
  
  @GetMapping("/{id}/revisions")
  public void getHistory(
    @PathVariable String id) {
    log.info("Get Audit history for entry with id: {}", id);
    List<AuditEntry<Person>> auditEntryList = auditService.getEntityRevisions(id);
    log.debug("Profile Audit history for id: {} is : {}", id, auditEntryList);

  }
}

@RequiredArgsConstructor
public abstract class AuditBaseService<E> implements AuditService<E> { ... }

我收到错误:“无法自动装配。在

private final AuditService<Person> auditService;
行上找不到‘AuditService’类型的bean”。 我可以通过添加一个新类来解决这个问题,如下所示:

@Service
public class PersonAuditService extends AuditBaseService<Person> {

  public PersonAuditService(AuditReader pAudit) {
    super(pAudit);
  }

}

问题就可以解决。但这不是一个好的解决方案,因为我有其他控制器应该使用它,但与其实体一起使用。除此之外,

PersonAuditService
除了调用超类之外什么也不做。 我想将其添加到项目的配置文件中,我们可以在其中定义 bean。但我做不到,因为我仍然对 bean 的创作感到困惑。

我不知道添加新课程

PersonAuditService
如何解决问题。幕后究竟发生了什么?如何通过在配置文件中定义 bean 来解决
PersonController
中的错误。

我从带有简单示例的文章中了解了依赖注入和控制反转的概念,至少我可以毫不困惑地理解它们!

很高兴得到您的支持。谢谢

java spring-boot dependency-injection inversion-of-control javabeans
1个回答
0
投票

PersonAuditService
是一个可以注入到
AuditService<Person> auditService
中的类。

AuditBaseService
是一个抽象类,你不能做
new AuditBaseService(...)
,你必须子类化AuditBaseService。

Spring 无法创建抽象类的实例。

© www.soinside.com 2019 - 2024. All rights reserved.