《看透SpringMVC》第九章 SpringMVC之器

9 springmvc 之器

9.1 總體結構介紹

EnvironmentCapable、EnvironmentAware

分別getEnv()提供(給spring調用)、setEnv()獲取Environmenthtml

這裏輸入引用文本這裏輸入引用文本java

Environment的實現類之一StandardServletEnvironment 主要保存有

- ServletConfig
- ServletContext
- JNDI
- 虛擬機屬性(java版本、操做系統、臨時目錄等)
- 系統環境變量(JAVA_HOME、PATH)

MutablePropertySources 保存 Environment 使用 CopyOnWriteArrayList 容器(https://www.cnblogs.com/dolphin0520/p/3938914.html),讀寫分離思想,也是多線程整塊替換思想

ApplicationContextAware

setApplicationContext(ApplicationContext) 設置contextweb

9.2 HttpServletBean

【設置ServletConfig】使用BeanWrapper 設置servletConfigProperty 到 this(DispatcherServlet)spring

將Servlet初始化參數設置到該組件上 //如contextAttribute、contextClass、namespace、contextConfigLocation;spring-mvc

爲何使用BeanWrapper呢?

不能使用set方法麼?多線程

9.3 FrameworkServlet

<!-- MVC Servlet -->
	<servlet>
		<servlet-name>springServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath*:/spring-mvc*.xml</param-value>
		</init-param>

        <!--
        是否將webApplicationContext設置到ServletContext
        <init-param>
            <param-name>publishContext</param-name>
            <param-value>false</param-value>
        </init-param>

        ServletContext 中要用做WebApplicationContext的屬性名稱。
        <init-param>
            <param-name>contextAttribute</param-name>
            <param-value>xxx</param-value>
        </init-param>

        當DispatcherServlet處理完一個請求後,是否須要向容器發佈一個ServletRequestHandledEvent事件,默認爲ture
        <init-param>
            <param-name>publishEvents</param-name>
            <param-value>false</param-value>
        </init-param>
        -->

		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>springServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

初始化WebApplicationContext

  • HttpServletBean進行了設置ServletConfig,Framework使用設置的參數進行初始化。
  • 將WebApplicationContext設置到ServletContext中。【publishContext配置】
  • 模版方法onRefresh()
  • 添加ContextRefreshListener()(FrameworkServlet內部監聽器),收到ContextRefreshedEvent後調用onRefresh()

9.4 DispatcherServlet

  • onRefresh() -> initStrategies() 初始化各個組件mvc

    初始化組件方法:從context中找相應的組件,找不到則使用默認組件(定義在DispatcherServlet.properties中)。app

相關文章
相關標籤/搜索