spring-framework source code

Springmvc

加载、初始化、运行 扫描包、实例化类、加入ioc容器、初始化HanlderMapping

HttpServletBean直接继承java的HttpServlet,作用是将Servlet中配置的参数设置到相应的属性; FrameworkServlet初始化了WebApplicationServlet;

springmvc配置中执行请求的是DispatcherServlet,以下为往上追溯的继承关系

public class DispatcherServlet extends FrameworkServlet

public abstract class FrameworkServlet extends HttpServletBean implements ApplicationContextAware

public abstract class HttpServletBean extends HttpServlet implements EnvironmentCapable, EnvironmentAware

public interface ApplicationContextAware extends Aware

实际执行的是HttpServletBean中的init方法,在此处方法内部调用了initBeanWrapper(bw)initServletBean();两个空方法,这两个方法由子类提供实现,其中在前者的注释是“Let subclasses do whatever initialization they like.”,就是说其它上下文的初始化工作交给子类来实现。 当然,这个init方法并不是空的,后面再做说明。

FrameWorkServlet

在这个Servlet中重写了initServletBean方法,这个里面除了输出一些日志信息和记录启动时间外,还执行了

try {
	// 初始化web环境的上下文,Initialize and publish the WebApplicationContext for this servlet.此处稍后再解释一下
	this.webApplicationContext = initWebApplicationContext();
	/**
	 * This method will be invoked after any bean properties have been set and
	 * the WebApplicationContext has been loaded. The default implementation is empty;
	 * subclasses may override this method to perform any initialization they require.
	 * @throws ServletException in case of an initialization exception
	 */
	initFrameworkServlet();
}

我们可以看到,在DispatherServlet中众多init方法最初是被重写的onRefresh方法调用,这个调用也是在上面的 initWebApplicationContext中。

protected void initStrategies(ApplicationContext context) {
	initMultipartResolver(context);
	initLocaleResolver(context);
	initThemeResolver(context);
	initHandlerMappings(context);
	initHandlerAdapters(context);
	initHandlerExceptionResolvers(context);
	initRequestToViewNameTranslator(context);
	initViewResolvers(context);
	initFlashMapManager(context);
}

后期包装返回值

package org.springframework.web.servlet.mvc.method.annotation;
public class ServletInvocableHandlerMethod extends InvocableHandlerMethod {
	try {
		// 这个地方处理返回值
		this.returnValueHandlers.handleReturnValue(
			returnValue, getReturnValueType(returnValue), mavContainer, webRequest);
	}
}

转载于:https://my.oschina.net/u/3058876/blog/2249972

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值