servletContext在spring中如何初始化(二)

2020-06-29  本文已影响0人  guessguess



init()方法的具体实现,位于HttpServletBean类中。

第172行

// Let subclasses do whatever initialization they like.

initServletBean();

看上面第注释就是,子类想怎么实现初始化就怎么初始化,看来这才是最重要的地方。所以在HttpServletBean类中,这个方法也是一个空方法。我们来看看他的子类org.springframework.web.servlet.FrameworkServlet是怎么实现的吧。

直接上代码图

FrameworkServlet中的initServletBean()的实现

initServletBean中();看到了我们熟悉的webApplicationContext, 并且把引用给了成员变量。

随后便是initFrameworkServlet()这个方法也是一个空方法,是去让子类自己去实现初始化的一个方法,或者是说spring暴露给我们去使用的一个方法。

那么重点就是initWebApplicationContext()需要如何初始化了。下面贴代码。

initWebApplicationContext()的实现

看上面的注释,一开始初始化肯定是什么上下文都没有,所以需要创建。所以我们关注一下558行。

//No conetxt instance is defined for this servlet - > create a local one

所以这个代码可以关注一下,看创建了什么,怎么创建的。

在FrameworkServlet中的实现

此方法还调用了一个重载方法

protected WebApplicationContext  createWebApplicationContext(@NullableApplicationContext parent)

下面我们看一下这个方法的实现。

createWebApplicationContext(@NullableApplicationContext parent)方法实现

这个方法里面,就是生成了一个上下文对象,然后生成完之后,将对应的servletConfig的相关信息注入到对应的成员变量中去。

创建完上下文之后,便是到了565行onRefresh,在FrameworkServlet类里面,这也是一个空方法。如图

onRefresh方法

他的具体实现就是我们预期的org.springframework.web.servlet.DispatcherServlet。

下面看看实现

onRefresh的具体实现

这些方法就是如何初始化Spring的相关组件。

上一篇下一篇

猜你喜欢

热点阅读