Я хочу отредактировать этот код, чтобы использовать конструктор 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'
Знаете ли вы, что было бы лучшим решением?
Контроллер AbstractAccount не имеет конструктора в вашем коде. Измените имя конструктора на AbstractAccountController. Если это опечатка, не обращайте внимания. Также вы можете просто добавить final к глобальным переменным.
Когда вы расширяете абстрактный класс, вы можете передать параметры зависимости в абстрактный класс, просто вызвав super
private final ServiceA serviceA;
public Constructor(ServiceA serviceA){
super(serviceA);
}
Ошибка заключается в том, что дочерний элемент явно не вызывает родительский конструктор, поэтому предполагается, что должен использоваться конструктор по умолчанию, но его не существует.
Убедитесь, что вы вызываете свой суперконструктор из дочернего элемента:
@Autowired
public AccountController(Service1 service1, Service2 service2, Service3 service3, Service4 service4) {
super(service1, service2);
this.service3 = service3;
this.service4 = service4;
}
можете ли вы показать мне пример кода, пожалуйста?