spring cloud分散式微服務-springboot省去web.xml配置
概述
最開始使用原生的springmvc時,總是免不了有如下xml配置
<!-- Spring MVC配置 --><!-- ====================================== --><servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup></servlet><servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>/*</url-pattern></servlet-mapping> <!-- Spring配置 --><!-- ====================================== --><listener> <listenerclass> org.springframework.web.context.ContextLoaderListener </listener-class></listener> <!-- 指定Spring Bean的配置檔案所在目錄。預設配置在WEB-INF目錄下 --><context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:config/applicationContext.xml</param-value></context-param>
但是,切換到springboot之後,web.xml之類的繁瑣的配置基本上都不見了。出於好奇研究了下springboot究竟幫我們做了什麼,我們可以免於這樣的繁瑣配置。 瞭解springcloud架構可以加求求:三五三六二四七二五九
Servlet3.0規範
首先研究的第一點,為什麼web.xml不見了。剛開始使用原生servlet(不使用web框架),web.xml就是非常重要的一個配置,無論是servlet、filter、listener都需要在web.xml裡面配置下。
但是在servlet3.0裡,這個配置得到了簡化。可以透過java配置(註解等)省去web.xml配置。
具體servlet3.0的規範這裡就不討論了,說下其中一個非常重要的類。 javax.servlet.ServletContainerInitializer
這個類會在web容器啟動階段被回撥,可以在onStartup方法裡做一些servlet、filter、listener的註冊等操作。
/** Interface which allows a library/runtime to be notified of a web application's startup phase and perform any required programmatic registration of servlets, filters, and listeners in response to it. */public interface ServletContainerInitializer { public void onStartup(Set<Class<?>> c, ServletContext ctx) throws ServletException; }
springboot的實現
首先spring在META-INF/services下配置了這個類,讓整個web容器啟動後可以找到並啟動這個類
SpringServletContainerInitializer
/** * @HandlesTypes這個註解標明瞭該ServletContainerInitializer需要在啟動時候處理哪些類, 然後伺服器會把找到的這些類傳到onStartup的第一個引數裡 注意這裡的類包括所配置類的子類,比如這裡配置WebApplicationInitializer, 啟動之後,就會把這個WebApplicationInitializer的子類都傳進去 */@HandlesTypes(WebApplicationInitializer.class)public class SpringServletContainerInitializer implements ServletContainerInitializer { @Override public void onStartup(Set<Class<?>> webAppInitializerClasses, ServletContext servletContext) throws ServletException { List<WebApplicationInitializer> initializers = new LinkedList<WebApplicationInitializer>(); //.... 省略容錯的一些程式碼 initializers.add((WebApplicationInitializer) waiClass.newInstance()); //.... AnnotationAwareOrderComparator.sort(initializers); for (WebApplicationInitializer initializer : initializers) { initializer.onStartup(servletContext); } }}
startup的邏輯很簡單,web容器啟動後,呼叫所有WebApplicationInitializer的onStartup方法。
WebApplicationInitializer 的實現SpringBootServletInitializer
@Overridepublic void onStartup(ServletContext servletContext) throws ServletException { //.... WebApplicationContext rootAppContext = createRootApplicationContext( servletContext); //...}
protected WebApplicationContext createRootApplicationContext( ServletContext servletContext) { //... return run(application);}
一般使用Springboot的時候,都會繼承一個類SpringBootServletInitializer,在這個類的onStartup方法中,啟動了整個Spring容器。
本地啟動springboot時,我們一般會寫一個類似於這樣的main方法。
上述分析也解釋了為啥把springboot應用部署到機器上,tomcat能夠找到springboot的入口,並啟動它。
DispatcherServlet的配置
關於springboot如何載入類並啟動的這裡就不介紹了。
這裡說明下究竟Springboot如何配置DispatcherServlet的
1)當類路徑下存在DispatcherServlet時候,該配置生效。
2)這個配置會在DispatcherServletAutoConfiguration配置完之後再配置。
DispatcherServletAutoConfiguration配置
看到這裡就是我們非常熟悉的springboot的使用了。springboot在 DispatcherServletConfiguration這個類裡對 DispatcherServlet進行了配置以及註冊。
總結
伺服器如tomcat在web應用啟動後,載入並啟動springboot,springboot透過@AutoConfiguration、@Bean、@Conditional等註解自動配置了DispatcherServlet。
轉載於:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69952307/viewspace-2676056/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Spring Cloud構建微服務架構分散式配置中心SpringCloud微服務架構分散式
- spring cloud springboot mybatis 分散式 微服務 架構原始碼CloudSpring BootMyBatis分散式微服務架構原始碼
- spring cloud微服務分散式雲架構Spring Cloud ZuulSpringCloud微服務分散式架構Zuul
- spring cloud微服務分散式雲架構-Spring Cloud BusSpringCloud微服務分散式架構
- Spring Cloud微服務分散式雲架構SpringCloud微服務分散式架構
- spring cloud分散式微服務-配置中心git示例SpringCloud分散式微服務Git
- spring cloud微服務分散式雲架構 - Spring Cloud簡介SpringCloud微服務分散式架構
- Spring Cloud構建微服務架構:分散式配置中心(加密解密)SpringCloud微服務架構分散式加密解密
- spring cloud微服務分散式雲架構-Spring Cloud NetflixSpringCloud微服務分散式架構
- (一)spring cloud微服務分散式雲架構-Spring Cloud簡介SpringCloud微服務分散式架構
- (一)spring cloud微服務分散式雲架構 - Spring Cloud簡介SpringCloud微服務分散式架構
- spring cloud微服務分散式雲架構-Spring Cloud 分散式的五大重點SpringCloud微服務分散式架構
- Spring Cloud Spring Boot mybatis 企業分散式微服務雲(六)分散式配置中心【Dalston版】CloudSpring BootMyBatis分散式微服務
- Spring Cloud微服務分散式雲架構簡介SpringCloud微服務分散式架構
- 構建Spring Cloud微服務分散式雲架構SpringCloud微服務分散式架構
- spring cloud微服務分散式雲架構- Eureka伺服器搭建及配置SpringCloud微服務分散式架構伺服器
- (五)spring cloud微服務分散式雲架構-配置中心服務化和高可用SpringCloud微服務分散式架構
- spring cloud分散式微服務:Spring Cloud ConfigSpringCloud分散式微服務
- spring cloud微服務分散式雲架構 - Spring Cloud整合專案簡介SpringCloud微服務分散式架構
- spring cloud微服務分散式雲架構--hystrix的使用SpringCloud微服務分散式架構
- spring cloud微服務分散式雲架構-Gateway入門SpringCloud微服務分散式架構Gateway
- spring cloud微服務分散式雲架構(一)-spring cloud 服務註冊與發現SpringCloud微服務分散式架構
- spring cloud微服務分散式雲架構-Spring Cloud Config環境庫SpringCloud微服務分散式架構
- (三)spring cloud微服務分散式雲架構 - Spring Cloud整合專案簡介SpringCloud微服務分散式架構
- Java架構-(一)spring cloud微服務分散式雲架構 - Spring Cloud簡介Java架構SpringCloud微服務分散式
- spring cloud微服務分散式雲架構-Commons 普通抽象SpringCloud微服務分散式架構抽象
- (十七)spring cloud微服務分散式雲架構-eureka 基礎SpringCloud微服務分散式架構
- 整合Spring Cloud微服務分散式雲架構技術點SpringCloud微服務分散式架構
- Spring Cloud微服務分散式雲架構組成未來SpringCloud微服務分散式架構
- spring cloud微服務分散式雲架構--服務註冊(consul)SpringCloud微服務分散式架構
- Spring Cloud分散式微服務雲架構SpringCloud分散式微服務架構
- (十五)spring cloud微服務分散式雲架構-commonservice-config配置服務搭建SpringCloud微服務分散式架構
- spring cloud微服務分散式雲架構-config配置自動重新整理SpringCloud微服務分散式架構
- Spring Cloud(4)——分散式配置中心SpringCloud分散式
- Spring Cloud微服務運營配置教程SpringCloud微服務
- 微服務之分散式配置中心微服務分散式
- Spring Cloud-honghu Cloud分散式微服務雲系統SpringCloud分散式微服務
- java版電子商務spring cloud分散式微服務-大話Spring CloudJavaSpringCloud分散式微服務