這一期我們來說一下Java程序員比較關(guān)心的spring架構(gòu), 為什么spring mvc已經(jīng)落伍了? Spring boot解決了哪些問題?
在回答這個問題之前,我們先回答一下spring架構(gòu)的主要作用是干什么的?Spring架構(gòu)的最大貢獻就是依賴注入。
在沒有依賴注入這種技術(shù)之前,我們要使用一個對象,就是直接創(chuàng)建這個對象。背上兩種方式,一種是使用的時候就創(chuàng)建一個新的,或者是創(chuàng)建一個全局的對象,一直調(diào)用它。
這樣的一個最大問題就是,如果有多個對象,他們共享一個接口,我無法通過這個接口來實例化一個對象,這會給單元測試和程序的設(shè)計帶來很多額外的工作。
為了解決這個非常煩人的問題,依賴注入的概念也就誕生了。Spring架構(gòu)最大貢獻就是解決了這個問題。
我們來看看spring是如何做到這一步的。比如說你有一個service組件類叫做TestService,你想在另一個Controller類里面調(diào)用這個service對象,你只需要在這個Service對象的聲明上面加Autowired注釋就可以了。
從上面的基礎(chǔ)延伸出去,spring架構(gòu)解決了很多編程中存在的問題。
解決的問題之一就是大大減少了重復(fù)的代碼。毋庸置疑,參閱上面的例子,使我們只需要一兩行代碼,就可以引入一個對象實例了。
解決的問題之二就是跟其他框架的聯(lián)合使用更加容易了。其他的框架包括hibernate對象和數(shù)據(jù)模型對應(yīng),iBatis顯示對象和數(shù)據(jù)對象的映射, JUNIT和Mockito單元測試集成。
好,接下來我們看一下spring mvc是干什么的?這個架構(gòu)它提供了如下簡單的概念,一個是dispatcher servlet,一個是model and view,一個是view resolver。當(dāng)然你也離不開controller??梢哉f作為mvc時代的框架,它是有一定的優(yōu)勢的。但在當(dāng)今時代, 單頁應(yīng)用已經(jīng)大興其道了。以mvc架構(gòu)所主導(dǎo)的多頁程序開發(fā)已經(jīng)日薄西山了。當(dāng)然spring mvc也不例外。
那接下來有個有意思的問題,為什么現(xiàn)在spring boot,成為最熱門的spring框架了呢? 原因就是復(fù)雜度。相比spring mvc,spring boot的配置極其簡單。Spring vc到底需要配置什么呢?第1個你需要配置你的View Resolver, 第2個你需要配置mvc resources, 第3個你需要配置dispatcher servlet。這三個東西正式上面所說的那三個簡單的概念。
事情就是這樣的具有戲劇性,這三個概念曾經(jīng)讓spring mvc大行其道,而如今已經(jīng)成為spring mvc的重要制肘。
這還不算完,如果你使用hibernate jpa的話,你還要配置一大堆設(shè)置, 諸如dataSource, entityManager, transactionManager等等。
是不是有點頭大呀?
而spring boot的出現(xiàn),去除了這些復(fù)雜的配置,解決了這個讓人頭疼的問題。這里的方案就是自動配置。
拿基礎(chǔ)依賴庫作為例子, 一個網(wǎng)絡(luò)應(yīng)用開發(fā)需要如下幾個依賴庫:
Spring
Web MVC
Jackson
Validation: 包括hibernate validator, validation API.
Embedded Servlet Container Tomcat
Logging?
當(dāng)你創(chuàng)建一個spring boot的工程的時候,這些都可以自動給你添加完成,作為開發(fā)者,你根本不需要關(guān)心這些依賴了。是不是這個世界突然間變得更光明了?
能做到這一步的, 就是在你創(chuàng)建spring boot工程的時候,要選擇spring boot starter web依賴。
除了上面這個starter web,spring boot還提供了其他的依賴支持,分別專注于如下幾個領(lǐng)域:
Actuator: 用于對程序進行高級監(jiān)控和跟蹤。
Embedded Servlet Integrations: 這個用用于服務(wù)器的部署。
Default Error Handling: 用于錯誤的處理。
好了,這期就先說這些,這里是丁哥開講,歡迎關(guān)注防止失聯(lián)。
?