我想編輯此代碼以使用建構式Autowired。
舊代碼:
@RestController
public abstract class AbstractAccountController<T> {
@Autowired
private Service1 service1;
@Autowired
private Service2 service2;
@Autowired
private Service3 service3;
...some Java methods
}
子班:
@RestController
public class AccountController extends AbstractAccountController<SomeResource> {
@Autowired
private Service4 service4;
@Autowired
private Service5 service5;
..... some Java methods
}
我嘗試以這種方式編輯代碼:
@RestController
public abstract class AbstractAccountController<T> {
private Service1 service1;
private Service2 service2;
private Service3 service3;
@Autowired
public AccountController(Service1 service1, Service2 service2) {
this.service1 = service1;
this.service2 = service2;
}
...some Java methods
}
子班:
@RestController
public class AccountController extends AbstractAccountController<SomeResource> {
private Service3 service3;
private Service4 service4;
private Service3 service3;
@Autowired
public AccountController(Service3 service3, Service4 service4) {
this.service3 = service3;
this.service4 = service4;
}
..... some Java methods
}
但我得到錯誤:
There is no default constructor available in 'com.test.controller.AbstractAccountController'
你知道什么是最好的解決方案嗎?
uj5u.com熱心網友回復:
錯誤是因為孩子沒有顯式呼叫父建構式,所以假設應該使用默認建構式,但不存在。
確保你從孩子那里呼叫你的超級建構式:
@Autowired
public AccountController(Service1 service1, Service2 service2, Service3 service3, Service4 service4) {
super(service1, service2);
this.service3 = service3;
this.service4 = service4;
}
uj5u.com熱心網友回復:
AbstractAccount 控制器在您的代碼中沒有建構式。請將建構式名稱更改為 AbstractAccountController。如果它是錯字不要介意。您也可以簡單地將 final 添加到全域變數。
當您擴展抽象類時,您可以通過簡單地呼叫 super 將依賴引數傳遞給抽象類
private final ServiceA serviceA;
public Constructor(ServiceA serviceA){
super(serviceA);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/447679.html
上一篇:如何在SpringBoot2.6.4中使用@ConfigurationProperties的記錄(類可能不是最終的)
