為什么越來越多的人選擇Spring Boot?
我們都知道,Spring是一個非常經典的應用框架,與其說是Java開發不如說是Spring開發,為什么現在越來越多的人會選擇用Spring Boot呢?。要回答這個問題,還需要從Java Web開發的發展歷史開始說起。
1、Java Web開發簡史
自1995年James Gosling(詹姆斯·高斯林)帶領團隊設計發布Java語言以來,Java一直排在編程語言排行榜的前列,James Gosling也被稱為“Java之父”。
在最初發布的Java版本中,包含Java SE、JavaEE、JavaME。
Java SE(Standard Edition)作為標準版本,提供最核心的基礎功能,Java EE(Enterprise Edition)作為企業版,主要用于企業級的Web開發,JavaME(Micro Edition)作為微型版本主要應用與移動設備的開發。隨著Java的語言的廣泛應用,Java也找到了自身的優勢,Java EE版本被應用得最多。
從1996年開始,JavaEE開發是基于JSP + Java Bean來完成的。
后來慢慢地演變,1997年官方推出了 JSP + Servlet + Java Bean來進行開發,Servlet起到了調度控制的作用,這是MVC設計的雛形。
然后,發展出現了 JSP + Sevlet + Java Bean + Dao的模式,將業務邏輯處理和數據庫訪問分離,出現了三層架構設計理念。
再后來,1998年前后,為了滿足多服務器之間的通信,采用了JSP + Servlet + EJB的形式,出現了RPC設計的雛形。
之后,繼續演變,在2006年首次出現 JSF + EJB + JPA,提出前后端完全隔離開發的思想。
當然,這些技術都是Java官方提供的。好像,一直都不那么受歡迎。尤其是在開源社區發布一些開源的產品用來來代替官方退出的這些技術,主要目的是為了簡化開發。于是就出現了許多非常經典的Java開發框架。。
2、Java Web框架創始人
下面,簡單總結四位全球知名的Java Web開發框架創始人,也是JavaEE開發的改造者,
第一位是Gavin King(加文·金),Hibernate框架創始人,一個具有革命性意義的、全自動化的ORM框架,于2006年發布,最初的版本是基于JPA來實現的。
第二位是Craig Mcclanahan(克雷格·麥克拉納漢),著名的Struts框架創始人,叫Craig Mcclanahan(克雷格·麥克拉納漢),比較早的程序員都用過Struts1和Struts2,感受過非常酸爽的味道。2008年發布1.0版本,在2013年6月底還爆發了一次眼中的安全漏洞,那時候開始,我開始全面棄用Struts框架。
第三位是Clinton Begin(克林頓·比格),MyBatis框架創始人,2010年發布,最早期的名字叫做iBatis,它是一個比Hibernate更加輕量級的,半自動化的持久化框架。目前,絕大部分互聯網公司都是采用MyBatis作為持久層的框架。
第四位是Rod Johnson(羅德·約翰遜),大名鼎鼎的Spring框架創始人,2004年發布1.0版本,以前叫做萬能膠,現在叫做全家桶,真正給程序員帶來了春天。
小伙伴們可以對比一下發際線。
3、Spring的演變
Spring是一個通用性非常強的框架,它提供的工具也非常全面,能滿足各個領域的開發需求。因此,使用Spring之前需要完成大量的個性化配置。在Spring演變過程中,一直存在一個爭議,是使用XML作為配置方式 還是 使用 Annotation注解作為配置方式?
Spring在開源社區不斷質疑聲中,不斷的發展和演變,直到Spring 4.0版本發布的時候,已經全面支持注解方式配置,沒有XML也可以進行開發。但是,開發者們在使用純注解開發以后,發現代碼侵入比較多,配置也稍顯麻煩,尤其是一些Maven依賴也比較繁雜,包括使用外部的Tomcat容器部署也需要不少的工作量。
于是,Pivotal團隊從2013年開始研發設計Spring Boot,它的初衷是為了簡化開發,旨在解放程序員的雙手。2014年4月,發布全新開源的輕量級框架,Spring Boot1.0版本。
4、Spring Boot的核心功能
(1)可以獨立運行Spring項目
Spring Boot可以以jar包的形式進行獨立的運行,使用:java -jar xx.jar 就可以成功的運行項目,或者在應用項目的主程序中運行main函數即可;
(2)內嵌的Servlet容器
內嵌容器,使得我們可以執行運行項目的主程序main函數,實現項目的快速運行;主程序代碼SpringbootDemoApplication.java
(3)提供starter簡化Manen依賴
Spring Boot提供了一系列的starter pom用來簡化我們的Maven依賴,比如創建一個web項目,只需要添加spring-boot-starter-web即可:
(4)自動配置Spring
Spring Boot會根據我們項目中類路徑的jar包/類,為jar包的類進行自動配置Bean,這樣一來就大大的簡化了我們的配置。當然,這只是Spring考慮到的大多數的使用場景,在一些特殊情況,我們還需要自定義自動配置;
(5)無代碼生成、無XML配置
Spring Boot神奇的地方不是借助于代碼生成來實現的,而是通過條件注解的方式來實現的,這也是Spring 4.x的新特性。
5、結論
所以,Spring Boot是由Spring發展演進而來的,是Spring進化的結果,是對Sping的升級。