Java程序員比較關(guān)心的spring架構(gòu), 為什么spring mvc已經(jīng)落伍了? Spring boot解決了哪些問題?

這一期我們來說一下Java程序員比較關(guān)心的spring架構(gòu), 為什么spring mvc已經(jīng)落伍了? Spring boot解決了哪些問題?

在回答這個(gè)問題之前,我們先回答一下spring架構(gòu)的主要作用是干什么的?Spring架構(gòu)的最大貢獻(xiàn)就是依賴注入。

在沒有依賴注入這種技術(shù)之前,我們要使用一個(gè)對(duì)象,就是直接創(chuàng)建這個(gè)對(duì)象。背上兩種方式,一種是使用的時(shí)候就創(chuàng)建一個(gè)新的,或者是創(chuàng)建一個(gè)全局的對(duì)象,一直調(diào)用它。

這樣的一個(gè)最大問題就是,如果有多個(gè)對(duì)象,他們共享一個(gè)接口,我無法通過這個(gè)接口來實(shí)例化一個(gè)對(duì)象,這會(huì)給單元測(cè)試和程序的設(shè)計(jì)帶來很多額外的工作。

為了解決這個(gè)非常煩人的問題,依賴注入的概念也就誕生了。Spring架構(gòu)最大貢獻(xiàn)就是解決了這個(gè)問題。

我們來看看spring是如何做到這一步的。比如說你有一個(gè)service組件類叫做TestService,你想在另一個(gè)Controller類里面調(diào)用這個(gè)service對(duì)象,你只需要在這個(gè)Service對(duì)象的聲明上面加Autowired注釋就可以了。

從上面的基礎(chǔ)延伸出去,spring架構(gòu)解決了很多編程中存在的問題。

解決的問題之一就是大大減少了重復(fù)的代碼。毋庸置疑,參閱上面的例子,使我們只需要一兩行代碼,就可以引入一個(gè)對(duì)象實(shí)例了。

解決的問題之二就是跟其他框架的聯(lián)合使用更加容易了。其他的框架包括hibernate對(duì)象和數(shù)據(jù)模型對(duì)應(yīng),iBatis顯示對(duì)象和數(shù)據(jù)對(duì)象的映射, JUNIT和Mockito單元測(cè)試集成。

好,接下來我們看一下spring mvc是干什么的?這個(gè)架構(gòu)它提供了如下簡(jiǎn)單的概念,一個(gè)是dispatcher servlet,一個(gè)是model and view,一個(gè)是view resolver。當(dāng)然你也離不開controller??梢哉f作為mvc時(shí)代的框架,它是有一定的優(yōu)勢(shì)的。但在當(dāng)今時(shí)代, 單頁(yè)應(yīng)用已經(jīng)大興其道了。以mvc架構(gòu)所主導(dǎo)的多頁(yè)程序開發(fā)已經(jīng)日薄西山了。當(dāng)然spring mvc也不例外。

那接下來有個(gè)有意思的問題,為什么現(xiàn)在spring boot,成為最熱門的spring框架了呢? 原因就是復(fù)雜度。相比spring mvc,spring boot的配置極其簡(jiǎn)單。Spring vc到底需要配置什么呢?第1個(gè)你需要配置你的View Resolver, 第2個(gè)你需要配置mvc resources, 第3個(gè)你需要配置dispatcher servlet。這三個(gè)東西正式上面所說的那三個(gè)簡(jiǎn)單的概念。

事情就是這樣的具有戲劇性,這三個(gè)概念曾經(jīng)讓spring mvc大行其道,而如今已經(jīng)成為spring mvc的重要制肘。

這還不算完,如果你使用hibernate jpa的話,你還要配置一大堆設(shè)置, 諸如dataSource, entityManager, transactionManager等等。

是不是有點(diǎn)頭大呀?

而spring boot的出現(xiàn),去除了這些復(fù)雜的配置,解決了這個(gè)讓人頭疼的問題。這里的方案就是自動(dòng)配置。

拿基礎(chǔ)依賴庫(kù)作為例子, 一個(gè)網(wǎng)絡(luò)應(yīng)用開發(fā)需要如下幾個(gè)依賴庫(kù):

Spring

Web MVC

Jackson

Validation: 包括hibernate validator, validation API.

Embedded Servlet Container Tomcat

Logging?

當(dāng)你創(chuàng)建一個(gè)spring boot的工程的時(shí)候,這些都可以自動(dòng)給你添加完成,作為開發(fā)者,你根本不需要關(guān)心這些依賴了。是不是這個(gè)世界突然間變得更光明了?

能做到這一步的, 就是在你創(chuàng)建spring boot工程的時(shí)候,要選擇spring boot starter web依賴。

除了上面這個(gè)starter web,spring boot還提供了其他的依賴支持,分別專注于如下幾個(gè)領(lǐng)域:

Actuator: 用于對(duì)程序進(jìn)行高級(jí)監(jiān)控和跟蹤。

Embedded Servlet Integrations: 這個(gè)用用于服務(wù)器的部署。

Default Error Handling: 用于錯(cuò)誤的處理。

好了,這期就先說這些,這里是丁哥開講,歡迎關(guān)注防止失聯(lián)。

?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容