在配置文件中注入抽象类,而不是使用扩展它的新类实例化 Spring Boot

问题描述 投票: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> { ... }

我在定义auditService的控制器类中遇到错误,说:“无法自动装配。找不到'AuditService'类型的bean”`。然后 我可以通过添加一个可以扩展 AuditBaseService 的新类来解决此问题,如下所示:

@Service
public class PersonAuditService extends AuditBaseService<Person> {

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

}

问题就可以解决。但这不是一个好的解决方案,因为新类(

PersonAuditService
)除了调用超类之外什么也不做。

我想在项目的配置文件中添加创建bean。但我做不到,因为我仍然对 bean 的创建感到困惑。

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

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.