Spring 簡介和啟動資訊分析
Spring Boot 優點
- 輕量化
- 提供 Spring 框架各種預設配置來簡化專案配置
- 內嵌 Web 容器
- 沒有冗餘程式碼生成和XML配置要求
Maven 導包
- spring-boot-starter:核心模組,包括了自動配置支援、日誌和YAML
- spring-boot-starter-test:測試模組,包括JUnit、Hamcrest、Mockito
-
spring-boot-starter-web
一個 Spring Boot 案例應該包括四個部分
- 主載入類
- 邏輯實現類
- 單元測試類
- 以及資源配置檔案。
建立SpringBoot 很簡單 ,直接用idea的選擇web工程就行
Spirng Boot 啟動debug日誌閱讀筆記
1、b.l.ClasspathLoggingApplicationListener :先輸出使用的各種jar包
2、 一個呆萌的SpringBoot 代表
3、Starting SpringbootlearnApplication on ZhangWenLiang with PID 7664 會啟動一個java執行緒 PID 為7664 ,隨機的,這個根據計算機作業系統給的隨機排程
4、zu.zwl.SpringbootlearnApplication : The following profiles are active: dev,devdb
打印出所選擇的profiles,這裡dev是我的開發環境properties和配置環境bean
5、然後跳過了很多個相同的配置檔案,很納悶 不懂
6、ationConfigEmbeddedWebApplicationContext :root of context hierarchy 載入了上下文
7、然後載入了兩個預設配置檔案
ationConfigEmbeddedWebApplicationContext : Unable to locate MessageSource
MessageSource :i18n用的
applicationEventMulticaster:事件驅動模型 具體幹啥的不知道。應該很關鍵吧
8、t.TomcatEmbeddedServletContainerFactory : None of the document roots [src/main/webapp, public, static] point to a directory and will be ignored.
最開始沒有webapp目錄,我自己手動建立了,重啟試試(過程中歌曲竟然卡了一下)
這裡的程式碼變為.t.TomcatEmbeddedServletContainerFactory : Document root: J:\MAKER\CodeFile\idea\springbootlearn\src\main\webapp ,證明成功了
我新增一個index.html 試試,看重新整理後能自動載入不。 是可以的
9、s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8989 (http)
在8989埠啟動了
10、o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
初始化內嵌的webApplicationContext上下文
Root WebApplicationContext: initialization completed in 2520 ms 還是挺快的
11、o.s.b.w.s.ServletContextInitializerBeans : Added existing Servlet initializer bean 'dispatcherServletRegistration' 註冊web的總跳轉dispatcher
org/springframework/boot/autoconfigure/web/DispatcherServletAutoConfiguration$DispatcherServletRegistrationConfiguration.class
12、o.s.b.w.s.ServletContextInitializerBeans : Created Filter initializer for bean 'characterEncodingFilter'
org/springframework/boot/autoconfigure/web/HttpEncodingAutoConfiguration.class
初始化 字元編碼過濾器
看下原始碼HttpEncodingAutoConfiguration.class
裡面有一個annotation
@ConditionalOnProperty(prefix = "spring.http.encoding", value = "enabled", matchIfMissing = true)
一個不可改變數
private final HttpEncodingProperties properties;
應該是有一個properties檔案,我找找在哪
在這個包下面找到了spring-configuration-metadata.json 檔案下有
就這樣設定了把
13、o.s.b.w.s.ServletContextInitializerBeans :Created Filter initializer for bean 'hiddenHttpMethodFilter' 幹什麼東東的? 它是前端後端資料互動時restFul風格的實現
用的這個org/springframework/boot/autoconfigure/web/WebMvcAutoConfiguration.class
瀏覽器 form 表單只支援 GET與 POST 請求,而DELETE、 PUT 等 method 並不支援, Spring3.0 添加了一個過濾器,可以將這些請求轉換為標準的 http 方法,使得支援 GET、 POST、 PUT 與DELETE 請求。
實現過程:
前臺:
後臺:
需注意:
需要註冊org.springframework.web.filter.HiddenHttpMethodFilter監聽器來代替最初的org.springframework.web.servlet.DispatcherServlet
看下原始碼
裡面有很多前臺的東西
估計是和前臺有關
14、o.s.b.w.s.ServletContextInitializerBeans : Created Filter initializer for bean 'httpPutFormContentFilter'; order=-9900, resource=class path resource [org/springframework/boot/autoconfigure/web/WebMvcAutoConfiguration.class]
也是監聽器 這次和put提交方式有關,需註冊,該過濾器只能接受enctype值為application/x-www-form-urlencoded的表單 ,我累個去,網上對其解釋千篇一律,無語,啥時候google了,我先試著讀下原始碼,也是WebMvcAutoConfiguration 。未果,終。
15、o.s.b.w.s.ServletContextInitializerBeans : Created Filter initializer for bean 'requestContextFilter'; order=-105, resource=class path resource [org/springframework/boot/autoconfigure/web/WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter.class] 這個是內部類
requestContextFilter 是將頁面提交的request轉發到Controller中
16、然後定義各個filter的攔截路徑 / 只攔截 /xxxx , /*攔截所有 /xxx 和/xxx.jsp
17、然後是初始化過濾器(上面是建立bean)
18、s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot[email protected]306279ee: startup date [Tue Sep 26 23:22:39 CST 2017]; root of context hierarchy
註冊總的 controler bean
19、緊接著是對映我們自定義的controller
s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/first]}" onto public java.util.Map<java.lang.String,java.lang.Object>zzu.zwl.controller.UserController.name1(javax.servlet.ServletResponse)
20、然後是裝配好的 對映
兩個error頁面,一個返回json,一個view ,一個/**配置,一個/**/favicon.ico來設定圖示
21、o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup
初始化成功了算是
22、ationConfigEmbeddedWebApplicationContext : Unable to locate LifecycleProcessor with name 'lifecycleProcessor':usingdefault[[email protected]1bd44c] 一個控制程序的風格,裡面一個
private volatile long timeoutPerShutdownPhase = 30000;
23、utoConfigurationReportLoggingInitializer : 日誌報告輸出
24、
成功啟動
25、會自動檢測程式碼變化,然後自動再次初始化
總結:web方面做的比較多,可能後期做著會非常完善吧 ,寫篇讀書日誌然後睡覺嘍