營(yíng)銷網(wǎng)站建設(shè)
全網(wǎng)營(yíng)銷網(wǎng)站
高端網(wǎng)站建設(shè)
商城網(wǎng)站建設(shè)
外貿(mào)網(wǎng)站建設(shè)
小程序開發(fā)
區(qū)塊鏈開發(fā)
物聯(lián)網(wǎng)項(xiàng)目開發(fā)
定制app開發(fā)
在線教育網(wǎng)站
速成網(wǎng)站建設(shè)
服裝網(wǎng)站建設(shè)
餐飲網(wǎng)站建設(shè)
珠寶首飾網(wǎng)站
機(jī)械制造網(wǎng)站
文化旅游網(wǎng)站
家裝建材網(wǎng)站
美容化妝品網(wǎng)站
數(shù)碼產(chǎn)品網(wǎng)站
模板案例庫(kù)
文章編輯:網(wǎng)站建設(shè) 文章來(lái)源:建站行業(yè)資訊 瀏覽量:次
移動(dòng)互聯(lián)與Java之間的關(guān)系, Java誕生二十余載,而各有千秋的新語(yǔ)言則層出不窮;丁雪豐 15 年前接觸 Java,而他依然最喜愛 Java。那么為什么他對(duì) Java 如此篤定呢?而在為數(shù)不少的框架中,為什么他又選中 Spring 框架?Spring 技術(shù)有哪些適用和不適用的場(chǎng)景?為了一探究竟,InfoQ 對(duì)丁雪豐先生進(jìn)行了采訪。
此外,丁雪豐先生還將作為演講嘉賓出席中國(guó)首屆 Spring Summit 技術(shù)峰會(huì),并進(jìn)行《有了 Spring Boot,內(nèi)部框架還缺什么?》的主題分享。此次峰會(huì)由 Pivotal 和極客邦科技聯(lián)合主辦,會(huì)議分設(shè) Spring 生態(tài) 10 余個(gè)技術(shù)主題,邀請(qǐng)了十余位中美專家,將從從企業(yè)上云、傳統(tǒng)行業(yè)在數(shù)字經(jīng)濟(jì)時(shí)代機(jī)遇與挑戰(zhàn)等宏觀戰(zhàn)略層面,以及微服務(wù)、DevOps、Reactive、CloudNative Java 等微觀技術(shù)層面,來(lái)詮釋如何完成企業(yè)數(shù)字化轉(zhuǎn)型這道考題。Spring Summit 2017 官網(wǎng)已經(jīng)上線,各位讀者可以移步了解詳情。
InfoQ: 您從事 Java 開發(fā)數(shù)年,您怎么評(píng)價(jià)這門語(yǔ)言?為什么 Java 會(huì)成為世界上使用者最多的語(yǔ)言?
丁雪豐:我是在 2002 年機(jī)緣巧合下開始正式學(xué)習(xí)并使用 Java 的,在那之前我都在使用微軟系的東西。當(dāng)時(shí)做的 Java 應(yīng)用很多還是 Applet,在頁(yè)面上呈現(xiàn)出酷炫的效果,用 Servlet 和 JSP 做后端服務(wù)的還不多。開個(gè)玩笑,當(dāng)時(shí) Java 號(hào)稱“write once, run anywhere”,我天真地相信了,后來(lái)才理解到這真的只是一個(gè)美好的愿望。不過這并不妨礙 Java 的成功,我本人也是一名堅(jiān)定的 Java 用戶(雖然我經(jīng)常會(huì)去學(xué)習(xí)各種新語(yǔ)言,但主要工作語(yǔ)言一直是 Java),如果翻看這幾年的 TIOBE 排行榜,你就會(huì)發(fā)現(xiàn)它長(zhǎng)期位居榜首,這就是大家對(duì) Java 的認(rèn)可。
一門語(yǔ)言好不好是仁者見仁智者見智的事。不過如果一門語(yǔ)言缺乏活力,那要么就是小眾無(wú)人問津,要么就是開發(fā)者也放棄維護(hù)了。Java 有著龐大的社區(qū)和使用者,雖然出于商業(yè)等原因,步伐顯得不如一些新興語(yǔ)言這么快,但一直在穩(wěn)步向前發(fā)展,同時(shí)還在不斷借鑒其他人的經(jīng)驗(yàn),所以有理由相信,Java 在未來(lái)的一段時(shí)間里仍然會(huì)處在一個(gè)很好的位置上。
很多人覺得靜態(tài)語(yǔ)言不夠靈活,但我覺得這是 Java 能被眾多軟件廠商接受的重要原因之一,它能夠適用于龐大的研發(fā)團(tuán)隊(duì)。試想一下,如果我只能在運(yùn)行時(shí)才知道一個(gè)接口返回的是什么,那上下游之間得要下多少成本來(lái)保證傳遞正確的內(nèi)容?而靜態(tài)語(yǔ)言絕大部分內(nèi)容都是明確的,就算有問題,多數(shù)也能在編譯時(shí)發(fā)現(xiàn)。
另外,我覺得面向?qū)ο笏枷氲膫鞑?,也?/font> Java 被廣泛接受的原因之一,在那個(gè)時(shí)候說起 OO,大家第一想起的就是 C++ 和 Java。根據(jù) OO 理論設(shè)計(jì)的系統(tǒng)能夠幾乎“無(wú)縫"地用 Java 實(shí)現(xiàn)出來(lái),再配合一些工具,代碼生成更是大大提升了開發(fā)的效率。在大規(guī)模工業(yè)化的開發(fā)過程中,這是非常重要的。
最后,我想強(qiáng)調(diào)一點(diǎn):通常大家說起 Java 都是指語(yǔ)言,但我們不能把 Java 狹義地理解為 Java 語(yǔ)言,個(gè)人認(rèn)為 Java 這個(gè)平臺(tái)才是關(guān)鍵,才是真正獲得成功的東西。 Java 平臺(tái)的開放和包容,讓它不僅可以運(yùn)行 Java 語(yǔ)言開發(fā)的代碼,還可以運(yùn)行 Ruby、Python、Java、Scala、Groovy 等很多語(yǔ)言寫的代碼,因此其他語(yǔ)言的開發(fā)者可以很輕松地切換至 Java 平臺(tái)。
InfoQ:現(xiàn)在新的語(yǔ)言層出不窮,其中不乏一些深受歡迎的語(yǔ)言。那么,Java 現(xiàn)在有哪些新的挑戰(zhàn)?您對(duì) Java 9 有怎樣的期待?
丁雪豐:關(guān)于這個(gè)問題,我以前在 InfoQ 上發(fā)表過一篇文章《》,以 Go 語(yǔ)言為例,我認(rèn)為這是一門非常出色的語(yǔ)言,在一些場(chǎng)景下有著比 Java 更好的表現(xiàn),但正如我上面說的,Java 不僅是一門語(yǔ)言,更是一個(gè)平臺(tái),它有著完善的生態(tài)環(huán)境,很多特性雖然語(yǔ)言本身不具備或者不盡如人意,但生態(tài)環(huán)境中總有更好的解決方案。
而且,真的在實(shí)際的生產(chǎn)中,語(yǔ)言本身往往只是考量的眾多因素之一,我能用某種語(yǔ)言很快地完成一個(gè)功能的開發(fā),但能不能讓 10 個(gè)人、50 個(gè)人都又快又好地以一樣的標(biāo)準(zhǔn)完成開發(fā)工作呢?有一套好的設(shè)施、工具甚至可執(zhí)行的標(biāo)準(zhǔn)會(huì)容易很多,所以我認(rèn)為 生態(tài)環(huán)境要比單獨(dú)的語(yǔ)言本身更為重要。
說到 Java 9,很多人都會(huì)期待模塊化,但其實(shí)我更希望 Java 9 出來(lái)的時(shí)候,Java 8 可以再普及一些??偸菚?huì)有人覺得新東西不太靠譜,要用低一個(gè)版本的東西,覺得用的人多了,經(jīng)過時(shí)間檢驗(yàn)了。君不見,如今還有很多運(yùn)行在 Java 6 甚至是 Java 1.4 上的系統(tǒng),什么時(shí)候能讓大部分人感受到 Java 8 的魅力呢?
InfoQ:能否回溯下 Spring 的進(jìn)化史?
丁雪豐:說起 Spring 就不得不提 Rod Johnson,Spring 誕生于他的那本《Expert One-on-One J2EE Design and Development 》,而他的另一本《Expert One-on-One J2EE Development without EJB》真正讓 Spring 紅透半邊天。
Spring 最早誕生在 2004 年,個(gè)人認(rèn)為在 2.0 版本以后,也就是上面提到的那本書出版后國(guó)內(nèi)的開發(fā)者才大范圍地接受 Spring,當(dāng)時(shí)國(guó)內(nèi)的滿江紅社區(qū)還組織翻譯了大量的開源框架的官方文檔,包括了 Spring、Hibernate、Seam 等等,這也在很大程度上推動(dòng)了這些框架在國(guó)內(nèi)的落地。
(注:Spring 框架是開源的 Java/Java EE 全功能站的應(yīng)用程序框架,以 Apache 許可證形式發(fā)布,由 Pivotal 開發(fā)并維護(hù)。)
再往后,Spring 的版本不斷迭代,其核心的部分并沒有太多的變化并開始趨于穩(wěn)定;不過逐步開始發(fā)展 Spring 的子項(xiàng)目,誕生了類似于 Spring Data、Spring Batch、Spring Integration 等諸多周邊的子項(xiàng)目,將很多功能都從 Spring Framework 中移到了子項(xiàng)目中。
現(xiàn)在到 Spring 的官方網(wǎng)站上,各種項(xiàng)目不下 20 個(gè),所有的這些子項(xiàng)目中,近期最熱門的當(dāng)屬 Spring Boot 和 Spring Cloud。這一對(duì)搭檔極大程度上降低了使用 Spring 快速開發(fā)生產(chǎn)級(jí)系統(tǒng)的成本,而且能夠方便地使用各種成熟的技術(shù)與設(shè)施,使得開發(fā)此類系統(tǒng)的門檻大幅降低。
InfoQ:能否向大家介紹下您所理解的 Spring 技術(shù)?Spring 框架有怎樣的特點(diǎn)?它最適合怎樣的項(xiàng)目情景?
丁雪豐:Spring 已經(jīng)不再僅代表一種框架,它與 Java 一樣,都已經(jīng)有了一個(gè)完整的生態(tài)環(huán)境(比如上文中提到的眾多子項(xiàng)目)。
先聊聊狹義的 Spring,即 Spring 框架。從最開始接觸 Spring 1.x 起,它特有的模塊化設(shè)計(jì)就讓人感到學(xué)習(xí)和使用起來(lái)沒有負(fù)擔(dān),因?yàn)槲抑恍枰フ莆招枰哪切┠K就行了,比如 Spring Core、數(shù)據(jù)訪問、MVC 等等,至于 Remoting 那些功能,大概有個(gè)印象就行,知道它有哪些功能,在需要的時(shí)候去翻看相應(yīng)的文檔就好了。
在后來(lái)的演進(jìn)過程中,Spring 框架變得越來(lái)越大,顯得有些臃腫,但開發(fā)者們還是只要關(guān)心自己要用的那些東西就好,了解下新的特性和用法,而且它在很多情況下還是能夠完美兼容的,所以升級(jí)時(shí)的負(fù)擔(dān)也不會(huì)很重。
至于其他的特點(diǎn),網(wǎng)上有很多資料,我就不再在此贅述了。
而廣義的 Spring 則是 Spring 的生態(tài),Spring 將很多功能拆散到眾多子項(xiàng)目中,每個(gè)子項(xiàng)目專注于某個(gè)特定的功能,比如 Spring Security 就專門處理安全相關(guān)的問題。并且,多數(shù)子項(xiàng)目都發(fā)展得很不錯(cuò),市面上至少都能找到基本單獨(dú)介紹一個(gè)子項(xiàng)目的書。
正如我前面提到的,在所有這些子項(xiàng)目中,Spring Boot 和 Spring Cloud 是近期最為熱門的項(xiàng)目,早期 Spring 還有一個(gè) Spring Roo 的項(xiàng)目,用來(lái)生成項(xiàng)目工程和各種代碼,但后來(lái) Spring 團(tuán)隊(duì)發(fā)現(xiàn)代碼生成并不是一個(gè)特別理想的做法。在 Spring 4.x 引入了大量注解,提升自動(dòng)化配置能力,Spring Boot 正是在此類能力的基礎(chǔ)之上,大大降低了需要編寫的配置和代碼量,它 替開發(fā)者做了絕大部分選擇,讓開發(fā)者能更專注于業(yè)務(wù)本身。
個(gè)人認(rèn)為,但凡 Web、后端服務(wù)這類的項(xiàng)目都可以放心大膽地使用 Spring Boot,哪怕是一整套項(xiàng)目都使用 Spring Boot 也不會(huì)有太多問題。比如國(guó)外的 Netflix,國(guó)內(nèi)的淘寶、支付寶,都是幾乎全部由 Java 使用,廣泛使用 Spring 技術(shù),不少也在使用 Spring Boot,甚至是向 Spring Boot 和 Spring Cloud 貢獻(xiàn)代碼。
但 Spring 也不是萬(wàn)能的,比如涉及硬件的一些場(chǎng)景就沒什么發(fā)揮余地了,在開發(fā)板或者嵌入式設(shè)備上,還是選擇更合適的東西吧。
InfoQ:您怎樣看待框架?它是很好的工具,但是一定程度上是不是也有不足和束縛?項(xiàng)目多大之后就建議一定使用框架?
丁雪豐:在我看來(lái),框架要做的事就是把大量最佳實(shí)踐固化下來(lái),降低開發(fā)者的使用成本,讓大家能聚焦于做什么,而不是怎么做。比如 Mina 和 Netty 就把怎么寫出好的網(wǎng)絡(luò)通信代碼的經(jīng)驗(yàn)固化了下來(lái),Google Guava 就把 Google 里大量 Java 的最佳實(shí)踐變成了人人可用的東西。
其實(shí)使用框架也確實(shí)有束縛,一旦你使用了一種框架,那你的系統(tǒng)在很大程度上來(lái)說有被綁定在上面了,切換的成本是非常高的。舉個(gè)例子,在存儲(chǔ)層使用了 Hibernate 來(lái)做 ORM,之后想完整切換到 myBatis,幾乎就是重寫整個(gè) DAO 的底層。
不過,情況也并非總是這么糟糕,也有容易的,比如一開始使用 Log4J 1.x 作為日志框架,后續(xù)想切換到 LogBack,不用把所有日志的包都重新 import 一遍,使用 log4j-over-slf4j 就好了。
至于項(xiàng)目多大之后使用框架,個(gè)人認(rèn)為,在條件允許的情況下,只要能夠幫助降低開發(fā)的復(fù)雜度,提升效率,無(wú)論什么規(guī)模的系統(tǒng)都可以使用合適的框架。
InfoQ:能否和大家分享下您的 Spring 學(xué)習(xí)歷程?新手是否建議直接學(xué)習(xí)框架?框架需要理解掌握到什么程度?學(xué)習(xí)框架需要源代碼?
丁雪豐:我自己最早就是翻譯 Spring 的官方文檔和書籍,從 Spring 1.x 到 2.0,再到 2.5。翻譯的過程讓我對(duì)整個(gè) Spring 框架有了比較多的了解,很多功能雖然一時(shí)用不上,但翻譯和審校時(shí)總是會(huì)看個(gè)幾遍,于是也能了解個(gè)大概。再到后來(lái)各種子項(xiàng)目則是在新出來(lái)時(shí)做個(gè)了解,實(shí)際工作中需要用到時(shí)再詳細(xì)閱讀文檔。
另一方面,多做一些分享和交流,準(zhǔn)備分享材料的過程也是對(duì)自己知識(shí)的梳理和總結(jié),會(huì)有很多意想不到的收獲。比如,之前準(zhǔn)備一個(gè) Spring Cloud 和微服務(wù)相關(guān)的分享,大部分網(wǎng)站和文章都會(huì)拿 Eureka 做例子,我特意去用了下平時(shí)不怎么接觸的 Spring Cloud Consul 服務(wù)發(fā)現(xiàn)。
至于后面兩個(gè)問題,我覺得是水到渠成的事情,不用刻意去糾結(jié)。
對(duì)于新接觸 Java 的同學(xué),學(xué)習(xí)基本語(yǔ)法自然是第一步,隨后需要找些小項(xiàng)目來(lái)練手了,這時(shí)自然就會(huì)接觸到一些框架,所以新手接觸并學(xué)習(xí)框架是件很自然的事情,不用去想該早點(diǎn)或者晚點(diǎn)。
平時(shí)把框架用好就行了,遇到問題會(huì)有思路去排查和解決。二八法則可以說是普遍適用的,對(duì)一個(gè)框架了解 20% 就能滿足大部分的日常需求??蛇@并不能算是用好,因?yàn)槟憧偸菚?huì)碰到些這樣那樣的問題,出現(xiàn)問題時(shí)自然就會(huì)去翻看對(duì)應(yīng)部分的代碼,所以學(xué)習(xí)框架的源代碼也是遲早會(huì)發(fā)生的事情。深圳博納網(wǎng)站建設(shè)公司搜集整理
[聲明]本網(wǎng)轉(zhuǎn)載網(wǎng)絡(luò)媒體稿件是為了傳播更多的信息,此類稿件不代表本網(wǎng)觀點(diǎn),本網(wǎng)不承擔(dān)此類稿件侵權(quán)行為的連帶責(zé)任。故此,如果您發(fā)現(xiàn)本網(wǎng)站的內(nèi)容侵犯了您的版權(quán),請(qǐng)您的相關(guān)內(nèi)容發(fā)至此郵箱【qin@198bona.com 】,我們?cè)诖_認(rèn)后,會(huì)立即刪除,保證您的版權(quán)。
技術(shù)咨詢
價(jià)格咨詢
建議投訴
0755-82538016
關(guān)閉窗口