Spring MVC源码分析(二)-----HttpServletBean

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yueloveme/article/details/89643980

推荐博客

给大家推荐个靠谱的公众号程序员探索之路,大家一起加油
程序员探索之路

引言

之前有一篇文章介绍了DispatcherServlet初始的时候做了哪些事情,接下来会把每一步做的事情细化来说,这篇介绍HttpServletBean

上一篇

Spring MVC源码分析(一)-----DispatcherServlet完成的工作
https://mp.csdn.net/mdeditor/89320043#

正文

init方法

HttpServletBean没有太复杂的功能主要函数是init方法中

@Override
	public final void init() throws ServletException {
		if (logger.isDebugEnabled()) {
			logger.debug("Initializing servlet '" + getServletName() + "'");
		}

		// Set bean properties from init parameters.
		try {
		    获取web.xml中的contextCofigLocation配置属性,就是SpringMVC的配置文件
		    如果没有就是PropertyValues数组长度为0,自己可以构建一个空的springboot项目debug一下
			PropertyValues pvs = new ServletConfigPropertyValues(getServletConfig(), this.requiredProperties);
			BeanWrapper bw = PropertyAccessorFactory.forBeanPropertyAccess(this);
			获服务器各种信息
			ResourceLoader resourceLoader = new ServletContextResourceLoader(getServletContext());
			bw.registerCustomEditor(Resource.class, new ResourceEditor(resourceLoader, getEnvironment()));
			这个方法没有具体实现
			initBeanWrapper(bw);
			将配置的初始化值设置到DispatcherServlet中
			bw.setPropertyValues(pvs, true);
		}
		catch (BeansException ex) {
			if (logger.isErrorEnabled()) {
				logger.error("Failed to set bean properties on servlet '" + getServletName() + "'", ex);
			}
			throw ex;
		}

		// Let subclasses do whatever initialization they like.
		这个是模板方法由 子类FrameworkServlet实现
		initServletBean();

		if (logger.isDebugEnabled()) {
			logger.debug("Servlet '" + getServletName() + "' configured successfully");
		}
	}

getServletName

/**
	 * Overridden method that simply returns {@code null} when no
	 * ServletConfig set yet.
	 * @see #getServletConfig()
	 */
	 获取servletname
	@Override
	public final String getServletName() {
		return (getServletConfig() != null ? getServletConfig().getServletName() : null);
	}

getServletContext

/**
	 * Overridden method that simply returns {@code null} when no
	 * ServletConfig set yet.
	 * @see #getServletConfig()
	 */
	 获取servletcontext
	@Override
	public final ServletContext getServletContext() {
		return (getServletConfig() != null ? getServletConfig().getServletContext() : null);
	}

注意

debug时会发现在项目启动的时候是不会进行SpringMVC的一系列初始化的,第一次请求的时候会触发
spring版本不同代码结构会略有不一样(版本相差不大的时候)

猜你喜欢

转载自blog.csdn.net/yueloveme/article/details/89643980