SpringMVC中load-on-startup標籤的執行過程

 spring mvc中load-on-startup標籤的作用是完成servlet加載,下面分析一下加載的執行過程:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5">
	<display-name>mvc</display-name>
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>

	<servlet>
		<servlet-name>DispatcherServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:application.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>

	<servlet-mapping>
		<servlet-name>DispatcherServlet</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>
</web-app>

 按住Ctrl點擊DispatcherServlet類中,但是在該類中並不能找到servlet啓動的init方法:

於是再Ctrl點擊進入DispatcherServlet的父類FrameworkServlet中,但是在該類中依然不能找到init方法:

於是再繼續Ctrl點擊進入FrameworkServlet的父類HTTPServletBean中,init方法便是啓動過程中第一個執行的方法:

其中,第171行調用的initServletBean方法,Ctrl點擊進入發現該方法體中沒有內容,原因:
HTTPServletBean中init方法被DispatcherServlet繼承後並調用,所以DispatcherServlet調用init方法執行到initServletBean方法後,首先調用從父類FrameworkServlet繼承的initServletBean方法,而上面的方法是在HTTPServletBean類中, 下面的initServletBean方法是FrameworkServlet類中的,也是init方法中所調用的;

上面方法中,第494行調用FrameworkServlet類中initWebApplicationContext方法:

上面第560行,調用的onRefresh方法在FrameworkServlet中又是方法體內無內容的方法;

於是再尋找其子類DispatcherServlet中onRefresh方法,onRefresh方法再調用initStrategies方法,即完成servlet加載

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章