使用Java做Web應(yīng)用開發(fā)已經(jīng)有近20年的歷史了,從最初的Servlet1.0一步步演化到現(xiàn)在如此多的框架,庫以及整個(gè)生態(tài)系統(tǒng)。經(jīng)過這么長時(shí)間的發(fā)展,Java作為一個(gè)成熟的語言,也演化出了非常成熟的生態(tài)系統(tǒng),這也是許多公司采用Java作為主流的語言進(jìn)行服務(wù)器端開發(fā)的原因,也是為什么Java一直保持著非常活躍的用戶群。
Java開發(fā)概述:
使用Java做Web應(yīng)用開發(fā)已經(jīng)有近20年的歷史了,從最初的Servlet1.0一步步演化到現(xiàn)在如此多的框架,庫以及整個(gè)生態(tài)系統(tǒng)。經(jīng)過這么長時(shí)間的發(fā)展,Java作為一個(gè)成熟的語言,也演化出了非常成熟的生態(tài)系統(tǒng),這也是許多公司采用Java作為主流的語言進(jìn)行服務(wù)器端開發(fā)的原因,也是為什么Java一直保持著非?;钴S的用戶群。然而這個(gè)生態(tài)系統(tǒng)紛繁復(fù)雜,一個(gè)非常簡(jiǎn)單的Java Web應(yīng)用程序都有可能應(yīng)用到以下技術(shù):
Java開發(fā)分為兩個(gè)陣營,一個(gè)是由Oracle 為代表的Java EE陣營,這是Web開發(fā)的官方參考標(biāo)準(zhǔn)。其中核心技術(shù)主要有Servlet, EJB, JMS, JSF, JDBC/JPA, JAXB, JAX-WS等。另一個(gè)陣營則是由開源社區(qū)以及Pivotal代表的Spring陣營,其中核心技術(shù)主要有 Spring Framework, Spring MVC, Spring Data, Spring Security等等。
Spring從最開始作為依賴注入的Bean container,逐漸發(fā)展為Java應(yīng)用開發(fā)的主流框架。Java EE因?yàn)槠溆纺[,復(fù)雜,難以使用的結(jié)構(gòu),被很多Java程序員拋棄。從Java EE6開始才引入了CDI (Context Dependency Injection),而且Java EE 的設(shè)計(jì)思想非常學(xué)術(shù)化, Gavin King等人脫離了工業(yè)界的需求,使得Java EE開發(fā)非常復(fù)雜。JSF甚至為Java之父James Gosling詬病。相反在Spring社區(qū),越來越多現(xiàn)代化的應(yīng)用開發(fā)方法被融入進(jìn)來,形成不同的Spring項(xiàng)目。
什么是Spring Boot?
Spring Boot便是一個(gè)社區(qū)反饋推動(dòng)的項(xiàng)目。 Spring Boot可以說是至少近5年來Spring乃至整個(gè)Java社區(qū)最有影響力的項(xiàng)目之一。Spring Boot主要包含以下特性:
1.直接嵌入Tomcat, Jetty或者Undertow作為Servlet container。從此之后再也不用將應(yīng)用程序打包成war然后上傳到application server里面了。
2.提供了starter POM, 能夠非常方便的進(jìn)行包管理, 很大程度上減少了jar hell或者dependency hell
3.自動(dòng)進(jìn)行Spring框架的配置,節(jié)省程序員大量的時(shí)間和精力,能夠讓程序員專注在業(yè)務(wù)邏輯代碼的編寫上
4.不需要任何第三方系統(tǒng), Spring Boot自帶了可以用于生產(chǎn)環(huán)境的程序狀態(tài)信息和健康狀態(tài)。同時(shí)可以讓應(yīng)用程序非常方便的讀取外部的配置信息
5.完全不需要任何代碼的自動(dòng)生成。更不需要用xml來進(jìn)行框架的配置
為什么Spring Boot是顛覆性的?
為什么說Spring Boot是顛覆性的呢?因?yàn)樗鼜氐赘淖兞薐ava應(yīng)用開發(fā)的模式。以往我們做Spring應(yīng)用開發(fā),要知道配置哪些類來讓Hibernate和Spring一起工作,要知道如何配置view resolver來控制哪個(gè)模版進(jìn)行視圖層的展示。經(jīng)常寫了一大堆代碼之后發(fā)現(xiàn)只是在處理Spring框架本身的配置,根本一行業(yè)務(wù)邏輯都沒有寫。開發(fā)完成之后,我們還要考慮部署的問題,且不說部署到非常笨重的應(yīng)用服務(wù)器,比如WebSphere, Weblogic或者JBoss,即使部署到Tomcat或者Jetty這種輕量級(jí)容器上面,我們要知道如何配置容器,如何修改配置文件等等。而且在多應(yīng)用部署到同一個(gè)Tomcat的時(shí)候,經(jīng)常會(huì)出現(xiàn)沖突。就算我們花了很大力氣解決了這些問題,程序部署成功之后,我們很難去了解這個(gè)程序的運(yùn)行狀態(tài)。有可能我們要配置很多第三方工具來去知道這個(gè)應(yīng)用程序運(yùn)行狀態(tài)如何,有哪些參數(shù),環(huán)境變量是什么。盡管Spring幫我們解決了依賴注入的問題,簡(jiǎn)化了一些MVC的流程,但是Spring框架本身集成了越來越多東西,導(dǎo)致其越來越難配置,維護(hù)成本成直線上升。很多時(shí)候Java程序員們看到Python, Ruby或者JavaScript程序員敲幾個(gè)命令安裝一些庫,然后簡(jiǎn)單的敲幾行代碼,引入一些框架比如flask,然后直接一個(gè)簡(jiǎn)單的API就可以跑起來了。這時(shí)候Java程序員可能還在研究該使用Maven里面的哪個(gè)庫,如何在代碼里面進(jìn)行配置呢。大家心里的表情肯定是這樣:
(求此時(shí)Java程序員心理陰影面積)
Java程序員揚(yáng)眉吐氣的時(shí)候到了!
傳統(tǒng)Spring開發(fā)對(duì)決Spring Boot應(yīng)用開發(fā)
接下來我會(huì)通過具體例子對(duì)比傳統(tǒng)的Spring應(yīng)用開發(fā)和Spring Boot應(yīng)用開發(fā)。假如我們開發(fā)一個(gè)Hello World的REST API,傳統(tǒng)的Spring開發(fā)應(yīng)該這么做。
1. 如果使用Maven進(jìn)行包管理,編寫pom.xml 如下
如上可以看到為了編寫簡(jiǎn)單的hello world REST API我們引入了Spring Core, Spring Web, Spring Web MVC, Java Servlet and Jackson這么多包依賴??梢韵胂髲?fù)雜一點(diǎn)的程序這個(gè)pom會(huì)變成什么樣。。。
2. 編寫HelloWorldInitializer class如下
這個(gè)已經(jīng)是非常簡(jiǎn)單的Java Config了,在Servlet 3.0之前用XML配置Spring的小伙伴們現(xiàn)在估計(jì)已經(jīng)崩潰。
3. 編寫HelloWorldConfiguration class
注意到我們這個(gè)類里面一行業(yè)務(wù)邏輯都沒有哦。。。
4. 真正開始編寫HelloWorldRestController
5. 下載Tomcat
6. 打包部署到Tomcat上
7.訪問localhost:8080/HelloWorld, 你終于看到了Hello World…
寫到這里我已經(jīng)累覺不愛了。。。
接下來Java老司機(jī)會(huì)帶領(lǐng)你們感受一下Spring Boot的魅力:
1. 編寫pom.xml
注意到我們只引入了一個(gè)包依賴,并且版本什么的就隨他去吧
2. 編寫main 函數(shù)
我們?cè)谶@里標(biāo)記HelloWorldDemoApplication class為SpringBootApplication, Spring Boot 在后臺(tái)會(huì)根據(jù)這個(gè)標(biāo)記進(jìn)行很多自動(dòng)配置,比如配置MVC,配置包掃描,注入必要的類,注入自動(dòng)配置的類等等。
這里的main函數(shù)是一個(gè)java標(biāo)準(zhǔn)的main函數(shù),這個(gè)相當(dāng)于應(yīng)用程序入口,servlet container會(huì)在啟動(dòng)的時(shí)候找到這個(gè)入口,啟動(dòng)Spring container,完成初始化。
3. 編寫HelloWorldRestController
4. 直接啟動(dòng)應(yīng)用程序,不需要部署
之前HelloWorld程序?qū)τ谛率謥碚f至少要花個(gè)10-20分鐘之類的,有了SpringBoot, 最多3分鐘之內(nèi)搞定HelloWorld不是夢(mèng)。
總結(jié)
這里我只是簡(jiǎn)單的對(duì)SpringBoot進(jìn)行了講解,SpringBoot有非常多值得深入討論的東西,它不僅讓我們做Java開發(fā)變的簡(jiǎn)單有效,更重要的是SpringBoot徹底顛覆了我們對(duì)Java開發(fā)的認(rèn)識(shí),讓我們第一次有了”原來Java開發(fā)可以這么做” 的感覺。有了SpringBoot之后,Java程序員可以更專注于業(yè)務(wù)邏輯,進(jìn)行更敏捷的開發(fā)。
-
JAVA
+關(guān)注
關(guān)注
19文章
2946瀏覽量
104361 -
SpringBoot
+關(guān)注
關(guān)注
0文章
173瀏覽量
153
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論