繁体   English   中英

强制超类包含无参数构造函数

[英]Force superclasses to include a no-argument constructor

关于弹簧控制器; 当包含构造函数时,还必须包含无参数构造函数,否则会发生'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();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM