簡體   English   中英

Lombok 子類構造函數@Autowired

[英]Lombok subclass constructor @Autowired

我有超類:

@AllArgsConstructor
public abstract class AbstractSuperService {
     protected final SuperRepository superRepository;
  
}

和兩個子類:

@Service
public class OneSubService extends AbstractSuperService {
     private final OneRepository oneRepository;
     
     public OneSubService(SuperRepository superRepository, OneRepository oneRepository){
         super(superRepository);
         this.oneRepository = oneRepository;
    }
}


@Service
public class SecondSubService extends AbstractSuperService {
     private final SecondRepository secondRepository;

     public SecondSubService(SuperRepository superRepository, SecondRepository secondRepository){
         super(superRepository);
         this.secondRepository = secondRepository;
    }
}

這段代碼是工作。 但是如果我更改代碼:刪除子類中的構造函數並在所有類中添加注釋 lombok @SuperBuilder。

@AllArgsConstructor
@SuperBuilder
public abstract class AbstractSuperService {
     protected final SuperRepository superRepository;
  
}

@Service
@SuperBuilder
public class OneSubService extends AbstractSuperService {
     private final OneRepository oneRepository;
     
}


@Service
@SuperBuilder
public class SecondSubService extends AbstractSuperService {
     private final SecondRepository secondRepository;

}

出現以下錯誤:

Description:

Parameter 0 of constructor in OneSubService required a bean of type 'OneSubService$OneSubServiceBuilder' that could not be found.


Action:

Consider defining a bean of type 'OneSubService$OneSubServiceBuilder' in your configuration.

如何在子類中正確應用lombok注解,以免在子類中編寫構造函數?

如果您使用@SuperBuilder ,則不會創建構造函數。 在 Spring 中,為了注入OneRepositorySuperRepository ,您需要一個將這兩個對象作為參數的構造函數。

使用@AllArgConstructor ,Lombok 僅為該類的成員創建構造函數,而不考慮超類。 為什么? 您可以在此處閱讀 Lombok 開發人員的答案。

最后,如果您想擁有一個超類,您的第一個解決方案是一個獨特的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM