[英]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 中,為了注入OneRepository
和SuperRepository
,您需要一個將這兩個對象作為參數的構造函數。
使用@AllArgConstructor
,Lombok 僅為該類的成員創建構造函數,而不考慮超類。 為什么? 您可以在此處閱讀 Lombok 開發人員的答案。
最后,如果您想擁有一個超類,您的第一個解決方案是一個獨特的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.