我对 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
中的错误。
我从带有简单示例的文章中了解了依赖注入和控制反转的概念,至少我可以毫不困惑地理解它们!
很高兴得到您的支持。谢谢
PersonAuditService
是一个可以注入到AuditService<Person> auditService
中的类。
AuditBaseService
是一个抽象类,你不能做new AuditBaseService(...)
,你必须子类化AuditBaseService。
Spring 无法创建抽象类的实例。