java - 强制超类包含无参数构造函数
问题描述
关于 Spring 控制器;当包含构造函数时,还必须包含无参数构造函数,否则会发生“NoSuchBeanDefinitionException”。这个消息非常模糊,让我有些头疼。
我们目前有一个抽象控制器类,我们的大多数控制器都从该类扩展。似乎当我的控制器扩展了这个类(它有一个 1 arg 构造函数)时,突然我收到了“NoSuchBeanDefinitionException”。
我想通过强制任何扩展抽象控制器以包含无参数构造函数的人来帮助未来的开发人员(甚至未来的我自己)。这可能吗?
编辑,为清楚起见添加代码
这是大多数控制器扩展的类,它包括一些辅助方法:
public class AbstractController
{
private String sessionName;
// other attributes / final variables
public AbstractController(String sessionName)
{
this.sessionName = sessionName;
}
public boolean isCommandInSession(HttpSession session)
{
return session.getAttribute(sessionName) != null;
}
// Other helper methods which include use of 'sessionName'
}
许多控制器之一的示例,可以正常工作。如果没有默认构造函数,或者仅覆盖 1 arg 构造函数,此控制器将失败并显示“NoSuchBeanDefinitionException”
@Controller
@SessionAttributes(SomeController.COMMAND)
@RequestMapping(SomeController.URL)
public class SomeController extends AbstractController
{
private String command = "someUniqueSessionName";
public SomeController()
{
super(COMMAND);
}
}
解决方案
你应该重构如下:
public class AbstractController
{
public boolean isCommandInSession(HttpSession session)
{
return session.getAttribute(getSessionName()) != null;
}
abstract String getSessionName();
}
推荐阅读
- chart.js - 是否可以在 web2py 中使用 Chart.js?
- javascript - 什么是不改变 js 原型的原因?
- javascript - indexOf() 反斜杠返回 -1 javascript
- mysql - 基于值范围的任意分组的 MySQL 方法(直方图)
- asp.net-mvc - 能否在 Azure 函数连接字符串部分同时使用测试和生产连接字符串?
- angular - Angular Router.navigate 函数只是重新加载同一页面
- dotnetnuke - 2sxc 中的多语言应用程序 - 一些想法
- c# - DoubleAnimation 不更新 Canvas.TopProperty/LeftProperty
- javascript - 我可以显示一个
用 vue js 标记,但我无法在 2 秒后删除它
- c++ - 我应该在派生类或基类中的哪个位置声明朋友类?