handleRequestInternal和handleRequest之间的区别

时间:2012-03-23 15:48:16

标签: java spring spring-mvc

我刚刚开始春天,我发现我们在控制器中使用handlerequest()方法,而我们正在使用handlerequestinternal()方法。

我试过谷歌这个,但没有找到任何具体的观点。

任何人都可以解释这两个函数之间的区别以及我们何时应该实现它们的每一个?

据我所知,spring框架将默认调用handlerequest()函数,因此我们可以将服务层放在那里。

我确信handlerequestinternal()必须提供一些额外的功能,但不确定。

请帮助我理解这一点。

2 个答案:

答案 0 :(得分:7)

旧的Spring 2.0控制器框架使用handleRequesthandleRequestInternal

当您扩展其中一个预先提供的基本支持类(例如handleRequestInternalAbstractController等)时,会使用

SimpleFormController。它们使用模板设计模式,并以该方法提供业务逻辑。

handleRequestController接口本身指定的方法。如果直接实现该接口,而不是扩展上述基类之一,则需要直接实现handleRequest

两者都已过时,并未在为Spring 2.5及更高版本编写的控制器中使用。

答案 1 :(得分:0)

public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
    this.checkAndPrepare(request, response, this instanceof LastModified);
    if (this.synchronizeOnSession) {
        HttpSession session = request.getSession(false);
        if (session != null) {
            Object mutex = WebUtils.getSessionMutex(session);
            synchronized(mutex) {
                return this.handleRequestInternal(request, response);
            }
        }
    }

    return this.handleRequestInternal(request, response);
}

protected abstract ModelAndView handleRequestInternal(HttpServletRequest var1, HttpServletResponse var2) throws Exception;

}

如果在控制器模板类(如AbstractController和ParameterizableViewConterollers)中,它将是Controller接口的子类,因此Spring人们在内部覆盖handleRequest方法并调用抽象的handleRequestInternal方法,因此每当我们使用模板类时,我们都使用此方法,否则我们使用handleRequest()方法只是我认为这个区别!。