Конструктор по умолчанию не найден; вложенным исключением является java.ленг.NoSuchMethodException с весенним MVC?
Я работаю с проектом контроллера Spring MVC. Ниже приведен мой контроллер, и у меня объявлен конструктор, который я специально использую для тестирования.
@Controller
public class TestController {
private static KeeperClient testClient = null;
static {
// some code here
}
/**
* Added specifically for unit testing purpose.
*
* @param testClient
*/
public TestController(KeeperClient testClient) {
TestController.testClient = testClient;
}
// some method here
}
всякий раз, когда я запускаю сервер, я получаю ниже исключения -
No default constructor found; nested exception is java.lang.NoSuchMethodException:
но если я удалить TestController
конструктор, то он работает отлично без каких либо проблем. Что я здесь делаю не так?
но если я добавлю этот конструктор по умолчанию, то он начнет работать нормально -
public TestController() {
}
3 ответов
вы должны определить no-args или конструктор по умолчанию, если вы создаете свой собственный конструктор.
вы можете прочитать, Почему по умолчанию или не требуется конструктор аргументов.
Spring не может создать экземпляр вашего TestController, потому что его единственный конструктор требует параметра. Вы можете добавить конструктор no-arg или добавить аннотацию @Autowired в конструктор:
@Autowired
public TestController(KeeperClient testClient) {
TestController.testClient = testClient;
}
в этом случае вы явно говорите Spring искать контекст приложения для компонента KeeperClient и вводить его при создании экземпляра TestControlller.
в моем случае весна бросила это, потому что я забыл сделать статический внутренний класс.
когда вы обнаружили, что это не помогает даже добавить конструктор no-arg, проверьте свой модификатор.