主要代码:HttpServletBean#init()
Spring MVC 的核心初始化方法在 HttpServletBean 下的 init()
方法,在 Tomcat 启动的时候会去调用 GenericServlet 的 init()
方法,从而进行 Spring 的初始化。可以在 init()
的最后一行看到,会调用 initServletBean()
进行容器的初始化工作和其他功能的初始化工作。
我们一直说 Spring 给用户留了很多的入口,可以自定义的定义一些操作,在进行初始化的时候,也可以看到 initBeanWrapper(bw)
给用户留了一个口子,可以在初始化的时候对 HttpServletBean 进行操作。
@Override
public final void init() throws ServletException {
PropertyValues pvs = new ServletConfigPropertyValues(getServletConfig(), this.requiredProperties);
if (!pvs.isEmpty()) {
try {
// 将 HttpServletBean 进行包装
BeanWrapper bw = PropertyAccessorFactory.forBeanPropertyAccess(this);
// 获取资源加载器
ResourceLoader resourceLoader = new ServletContextResourceLoader(getServletContext());
bw.registerCustomEditor(Resource.class, new ResourceEditor(resourceLoader, getEnvironment()));
// 用户可以自定义实现方法来在初始化的时候,对 HttpServletBean 进行操作
initBeanWrapper(bw);
bw.setPropertyValues(pvs, true);
}
catch (