【发布时间】:2023-03-25 08:10:01
【问题描述】:
我正在使用 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() {
}
【问题讨论】:
-
您需要添加一个无参数构造函数才能让@Controller 工作。
public TestController() {}。当您删除自定义构造函数时,默认构造函数(无参数)变为可用,但在存在带参数的构造函数时,不隐式存在无参数构造函数。 -
@TJ 是的,添加后它工作正常,但在我没有任何默认构造函数之前,刚才我添加了带参数的构造函数然后它开始失败。
-
添加另一个无参数的构造函数。你可以有多个构造函数。
Polymorphism。在没有显式定义的构造函数的情况下,默认的无参数构造函数是隐式的。 -
这是简单的 Java:如果您没有任何构造函数,那么将为您创建一个默认的无参数构造函数。创建自己的构造函数后,您有责任创建一个默认构造函数(如果需要)。由于 Java Bean 需要默认构造函数,因此您会收到错误消息。
标签: java spring spring-mvc model-view-controller