gpt4 book ai didi

java - 强制父类(super class)包含无参构造函数

转载 作者:行者123 更新时间:2023-12-02 02:24:57 24 4
gpt4 key购买 nike

关于 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com