作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
关于 Spring Controller ;当包含构造函数时,还必须包含无参数构造函数,否则会发生“NoSuchBeanDefinitionException”。这条信息非常模糊,让我有些头疼。
我们目前有一个抽象 Controller 类,我们的大多数 Controller 都是从它扩展而来的。看起来,当我的 Controller 扩展此类(具有 1 个参数构造函数)时,我突然收到“NoSuchBeanDefinitionException”。
我想通过强制任何人扩展抽象 Controller 以包含无参数构造函数来帮助 future 的开发人员(甚至将来的我自己)。这可能吗?
编辑,添加代码以保持清晰
这是大多数 Controller 扩展自的类,它包含一些辅助方法:
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'
}
许多 Controller 之一的示例,运行良好。如果没有默认构造函数,或者仅覆盖 1 个参数构造函数,此 Controller 将失败并显示“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();
}
关于java - 强制父类(super class)包含无参构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57258563/
我是一名优秀的程序员,十分优秀!