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() {
}
型
6条答案
按热度按时间xxhby3vn1#
Spring无法示例化TestController,因为它唯一的构造函数需要一个参数。你可以添加一个no-arg构造函数,或者你可以在构造函数中添加@Autowired注解:
字符串
在本例中,您显式地告诉Spring在应用程序上下文中搜索KeeperClientbean,并在示例化TestControlller时注入它。
kqqjbcuj2#
如果要创建自己的构造函数,则必须定义 no-args 或 default 构造函数。
你可以在这里读到为什么需要默认或无参数构造函数:
Why default or no argument constructor is important in Java class?
zfciruhq3#
在我的例子中,spring抛出了这个,因为我忘记了使内部类成为静态的。
当你发现它甚至没有帮助添加一个无参数的构造函数时,请检查你的修饰符。
zynd9foi4#
在我的例子中,我忘记在方法参数中添加
@RequestBody
注解:字符串
pbgvytdp5#
如果您的环境使用**Guice和Spring,并使用构造函数@Inject,例如Play Framework,如果您错误地自动完成了导入,并且选择了以下选项,您也会遇到此问题:
字符串
然后,您会得到相同的
missing default constructor
错误,即使使用@Inject的源代码的其余部分看起来与项目中的其他工作组件完全相同,并且编译时没有错误。更正为:
型
不要编写带有构造时间注入的默认构造函数。
qoefvg9y6#
你可以这样做。首先,让我们声明要注入的静态变量NAME_STATIC。之后,我们将创建一个setter方法,名为setNameStatic,并使用@Value注解对其进行注解:public class StringName {
字符串
}