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

zed5wv10  于 2024-01-06  发布在  Spring
关注(0)|答案(2)|浏览(211)

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

  1. public class PersonController {
  2. private final AuditService<Person> auditService;
  3. @GetMapping("/{id}/revisions")
  4. public void getHistory(
  5. @PathVariable String id) {
  6. log.info("Get Audit history for entry with id: {}", id);
  7. List<AuditEntry<Person>> auditEntryList = auditService.getEntityRevisions(id);
  8. log.debug("Profile Audit history for id: {} is : {}", id, auditEntryList);
  9. }
  10. }
  11. @RequiredArgsConstructor
  12. public abstract class AuditBaseService<E> implements AuditService<E> { ... }

字符串
我在定义AuditService的控制器类中得到一个错误,说:“无法自动连接。找不到'AuditService'类型的bean”`。然后我可以通过添加一个可以扩展AuditBaseService的新类来修复这个错误,如下所示:

  1. @Service
  2. public class PersonAuditService extends AuditBaseService<Person> {
  3. public PersonAuditService(AuditReader pAudit) {
  4. super(pAudit);
  5. }
  6. }


这个问题可以解决,但这不是好的解决方案,因为新类(PersonAuditService)除了调用超类之外什么也不做。
我想在项目的配置文件中添加创建bean。但我不能这样做,因为我仍然对bean的创建感到困惑。
如果能得到你们的支持就太好了。谢谢

kq4fsx7k

kq4fsx7k1#

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

o3imoua4

o3imoua42#

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

  1. config.java
  2. @Bean
  3. public AuditBaseService<Person> personAuditService(AuditReader pAudit) {
  4. return new AuditBaseService<>(pAudit) {
  5. };
  6. }

字符串

相关问题