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

zed5wv10  于 5个月前  发布在  Spring
关注(0)|答案(2)|浏览(76)

我是新的Spring Boot 和豆的概念。我的类如下:

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的创建感到困惑。
如果能得到你们的支持就太好了。谢谢

kq4fsx7k

kq4fsx7k1#

PersonAuditService是一个可以注入到AuditService<Person> auditService中的类。
AuditBaseService是一个抽象类,你不能做new AuditBaseService(...),你必须继承AuditBaseService。
Spring不能创建抽象类的示例。

o3imoua4

o3imoua42#

我想我找到了我的答案。但是我仍然不确定这是否是一个创建bean的好方法,以及它是如何工作的。如果有人能给我解释一下就太好了。
我所做的只是将personAuditService定义为配置文件中的一个方法,而不是创建额外的类PersonAuditService,这对我来说也是一样的。

config.java

@Bean
  public AuditBaseService<Person> personAuditService(AuditReader pAudit) {
    return new AuditBaseService<>(pAudit) {
    };
  }

字符串

相关问题