一、Java簡介
1、Java是一門面向?qū)ο蟮木幊陶Z言,不僅吸收了C++語言的各種優(yōu)點(diǎn),還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強(qiáng)大和簡單易用兩個(gè)特征。Java語言作為靜態(tài)面向?qū)ο缶幊陶Z言的代表,極好地實(shí)現(xiàn)了面向?qū)ο罄碚撛试S程序員以優(yōu)雅的思維方式(思想很重要)進(jìn)行復(fù)雜的編程。
2、Java具有簡單性、面向?qū)ο蟆⒎植际健⒔研浴踩浴⑵脚_(tái)獨(dú)立與可移植性、動(dòng)態(tài)性特點(diǎn)。Java可以編寫桌面應(yīng)用程序、Web應(yīng)用程序、分布式系統(tǒng)和嵌入式系統(tǒng)應(yīng)用程序等。
3、Java三大體系:
Java SE(J2SE)
Java EE
Java Me
java常用的框架結(jié)構(gòu)
Spring Boot
Java 一直在構(gòu)建 Spring 應(yīng)用程序,Spring Boot 是 Spring 的特定版本,通過對配置細(xì)節(jié)進(jìn)行處理,Spring Boot 可以自動(dòng)化微服務(wù)配置過程,其創(chuàng)建是為了自啟動(dòng)所有類型 Spring 項(xiàng)目,而不僅僅是微服務(wù)。一旦應(yīng)用程序完成,Spring Boot 會(huì)混合在 Web 服務(wù)器中,并發(fā)出 JAR 文件,可以想象成原始 Docker 容器。
使用 Spring 開發(fā)微服務(wù)遵循與 Web 應(yīng)用相同的 MVC 理念。該框架享有多年 Java 開發(fā)所構(gòu)建的深層連接,包括所有主要和次要數(shù)據(jù)存儲(chǔ),LDAP 服務(wù)器以及 Apache Kafka 等消息傳遞工具集成,眾多維護(hù)運(yùn)行服務(wù)器集合的小功能,比如 Spring Vault,維護(hù)生產(chǎn)服務(wù)器所需密碼等。
Eclipse MicroProfile
2016 年,Java Enterprise 社區(qū)決定清除 Java Enterprise Edition 中的部分內(nèi)容,以便用戶可使用經(jīng)典部件構(gòu)建簡單微服務(wù)。在去掉大量庫之后,社區(qū)保留了處理 REST 請求、解析 JSON 和管理依賴注入等功能,終版本被稱為 Eclipse MicroProfile,其特點(diǎn)是快速且簡單。
從那時(shí)起,MicroProfile 社區(qū)就制定了一個(gè)協(xié)議,“每季度發(fā)布一次新版本,同時(shí)添加新代碼以保持微服務(wù)平穩(wěn)安全運(yùn)行”。對于使用 Java EE 的人來說,開發(fā)過程和代碼結(jié)構(gòu)將非常熟悉,但無休止的配置麻煩已被去除。
Dropwizard
2011 年,Dropwizard 問世并開啟 Java Enterprise 開發(fā)人員的視野,其提供非常簡單的開發(fā)模型,用戶可添加業(yè)務(wù)邏輯,并根據(jù)慣例配置其他內(nèi)容。整個(gè) JAR 文件非常苗條,并且可以快速啟動(dòng)。
Dropwizard 的大限制可能是缺乏依賴注入,如果想使用依賴注入保持代碼干凈和松散耦合,用戶需要自己添加庫。與 Spring 不同,沒有 Dropwizard 方法可以做到這一點(diǎn)。但是,Dropwizard 支持大多數(shù)功能,比如日志記錄、健康檢查和提供彈性代碼。
WildFly Thorntail
Red Hat 用戶使用靈活的配置工具構(gòu)建 MicroProfile 版本,該框架初被稱為 WildFly Swarm,隨后被重命名為 Thorntail。只需在 Thorntail 上指定需要功能,用戶即可創(chuàng)建 Maven 構(gòu)建文件,然后由 Maven 負(fù)責(zé)組裝一切。
Thorntail 通過掃描代碼檢測主要組件,也可使用 BOM 文件覆蓋。全部運(yùn)行時(shí),Thorntail 將刪除不被使用的 Java 企業(yè)版并創(chuàng)建小型 JAR 文件,可以使用命令部署。這是另一種遵循 Java 企業(yè)版?zhèn)鹘y(tǒng)方法,而不保留沉重包袱的框架。
Helidon
Helidon 架構(gòu)剔除了 Java Enterprise Edition,保留基于 servlet 的輕量級核心。在 Helidon 中,開發(fā)人員可使用 Netty 并添加代碼進(jìn)行路由和錯(cuò)誤處理。它采用兩種基本代碼模型,即 SE 和 MP 版本。
Node.js 程序員會(huì)對 Helidon SE 非常熟悉,因?yàn)槠渚哂杏删潼c(diǎn)連接的長鏈函數(shù)調(diào)用。對于使用 JAX-RS 的 Java 程序員而言,Helidon MP 看起來會(huì)很熟悉,Helidon 集成了一些備受好評的工具,用于檢查服務(wù)器運(yùn)行狀況或通過微服務(wù)跟蹤數(shù)據(jù)流。
Cricket
Cricket 是一個(gè)快速 API 開發(fā)框架,雖然小,但包含相對豐富的功能,比如鍵值數(shù)據(jù)存儲(chǔ),以節(jié)省連接數(shù)據(jù)庫和調(diào)度程序,控制重復(fù)的后臺(tái)處理。沒有其他依賴項(xiàng)增加復(fù)雜性或鎖定,因此將代碼添加到 Cricket 并啟動(dòng)獨(dú)立微服務(wù)非常容易。
Jersey
開發(fā) Web 服務(wù)的標(biāo)準(zhǔn)之一是用于 RESTful Web 服務(wù)的 Java API(又名 JAX-RS),這是一個(gè)已在 Jersey 框架中實(shí)現(xiàn)的通用規(guī)范。該方法在很大程度上取決于使用注釋來指定路徑映射和返回詳細(xì)信息。解析參數(shù)和打包 JSON 其他內(nèi)容,Jersey 均可處理。
Jersey 的主要優(yōu)點(diǎn)是實(shí)現(xiàn) JAX-RS 標(biāo)準(zhǔn),部分開發(fā)人員也會(huì)將 Jersey 和 Spring Boot 結(jié)合在一起使用。
Play
體驗(yàn) JVM 跨語言功能的佳方式之一是用 Play 框架,這是與 Java 或其他 JVM 語言鏈接的 Scala 代碼。該代碼非常現(xiàn)代,具有異步、無狀態(tài)模型等,不會(huì)使服務(wù)器過載,沒有無休止的線程試圖跟蹤用戶及會(huì)話數(shù)據(jù)。Play 有一些額外功能可用于充實(shí)網(wǎng)站,比如 OpenID、驗(yàn)證和文件上傳支持。
Swagger
構(gòu)建 API 可能看起來像編寫偵聽端口并提供答案的代碼一樣簡單,但 Swagger 開發(fā)人員不會(huì)同意此說法。他們創(chuàng)建了名為 OpenAPI 的完整 API 規(guī)范語言,Swagger 團(tuán)隊(duì)提供將此規(guī)范轉(zhuǎn)換為自動(dòng)化測試和文檔等的代碼。
Swagger 配置文件對 API 非常簡單,可用于實(shí)現(xiàn)并記錄接口行為,提供工具測試在其下構(gòu)建的代碼,此外,提供 API 治理機(jī)制。Swagger 是 API 的生態(tài)系統(tǒng),并且不局限于 Java。如果團(tuán)隊(duì)轉(zhuǎn)移到 Node.js 或其他語言,則會(huì)有 Swagger Codegen 模塊等待將 OpenAPI 規(guī)范轉(zhuǎn)換為該語言的實(shí)現(xiàn)。
Restlet
框架之間的較大差異之一是與其他服務(wù)和庫之間的連接數(shù)。Restlet 是可提供大功能和連接集合的項(xiàng)目之一。為防微服務(wù)對郵件服務(wù)器接收 POP,IMAP 或者 SMTP, Restlet 集成了 JavaMail 庫;為防構(gòu)建大量文本索引和元數(shù)據(jù),Restlet 集成了 Lucene 和 Solr。
Restlet 不需要使用 JSON,因?yàn)榇a可以處理 XML、CSV、YAML 等多種文件格式,還可獲得用于構(gòu)建響應(yīng)模板的多個(gè)不同選項(xiàng)。此外,Restlet 客戶端允許在 Chrome 瀏覽器測試 API。
Squash
因?yàn)椴考缮Ⅰ詈锨液茈y跟蹤通過系統(tǒng)所有層的數(shù)據(jù)流,因此調(diào)試微服務(wù)一直是個(gè)難題。Squash 允許在 Kubernetes 集群運(yùn)行代碼中設(shè)置斷點(diǎn),在 IDE 接收所有數(shù)據(jù),就好像本地運(yùn)行代碼一樣。Squash 還集成了 Node.js 和 Python 運(yùn)行時(shí),以防微服務(wù)集合沒有使用 Java 代碼。
Telepresence
Telepresence 是另一個(gè)調(diào)試選擇,可為遠(yuǎn)程 Kubernetes 集群微服務(wù)創(chuàng)建本地代理,對此服務(wù)的調(diào)用將轉(zhuǎn)移到本地,可以在其中設(shè)置斷點(diǎn)或執(zhí)行本地計(jì)算機(jī)上可進(jìn)行的任何操作。
Zipkin
Zipkin 用于在微服務(wù)上記錄并關(guān)聯(lián)事件,以便在問題通過機(jī)器集合時(shí)進(jìn)行隔離和研究。Zipkin 有 Java 等至少六種語言實(shí)現(xiàn)版本,因此可處理多語言系統(tǒng)。不少框架已經(jīng)通過某種形式集成 Zipkin,比如 Spring。
二、Java的主要特性
1、java語言是簡單的:java語言的語法與C語言和C++語言很接近,使得大多數(shù)程序員很容易學(xué)習(xí)和使用。另一方面,Java丟棄了C++中很少使用的、很難理解的、令人迷惑的那些特性,如操作符承載、多繼承、自動(dòng)的強(qiáng)制類型轉(zhuǎn)換,尤其是,Java語言不使用指針,而是引用。并提供了自動(dòng)的廢料收集,使得程序員不必為內(nèi)存管理而擔(dān)憂。
2、Java語言是動(dòng)態(tài)的:Java語言的設(shè)計(jì)目標(biāo)之一就是適應(yīng)于動(dòng)態(tài)變化的環(huán)境,.Java程序需要的類能夠動(dòng)態(tài)地被載入到運(yùn)行環(huán)境,也可以通過網(wǎng)絡(luò)來載入動(dòng)態(tài)的類,這也有利于軟件的升級。另外,Java中的類有一個(gè)運(yùn)行時(shí)刻的表示,能進(jìn)行類型時(shí)候的檢查。
3、Java語言是面向?qū)ο蟮模篔ava語言提供類、接口和繼承等原語,為了簡單起見,只支持類之間的單繼承,但支持接口之間的多繼承,并支持類與接口之間的實(shí)現(xiàn)機(jī)制(關(guān)鍵字implements),Java語言全面支持多動(dòng)態(tài)綁定,而C++語言只對虛函數(shù)使用動(dòng)態(tài)綁定。Java是一個(gè)純面面對象設(shè)計(jì)的程序語言!
4、Jva語言是多線程的:在Java語言中,線程是一種特殊的對象,它必須由Thread類或其子(孫)類來創(chuàng)建,通常有兩種方法來創(chuàng)建線程:第一、使用型構(gòu)為Thread(Runable)構(gòu)造子將一個(gè)實(shí)現(xiàn)了Runnable接口的對象包裝成了一個(gè)線程。第二、從Thread類派生出子類并重寫run方法,使用該子類創(chuàng)建的對象即為線程。注意Thread類已經(jīng)實(shí)現(xiàn)了runnable接口,因此任何一個(gè)線程均有它的run方法,而run方法中包含了線程所要運(yùn)行的代碼。線程的活動(dòng)由一組方法來控制,Java語言支持多個(gè)線程的同時(shí)執(zhí)行,并提供多線程之間的同步機(jī)制(關(guān)鍵字為synchronized)。
5、Java語言是分布式的:Java語言支持Internet的應(yīng)用開發(fā),在基本的Java應(yīng)用編程接口中有一個(gè)網(wǎng)絡(luò)應(yīng)用編程接口(Java net),它提供了用于網(wǎng)絡(luò)應(yīng)用編程的類庫,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(遠(yuǎn)程方法激活)機(jī)制也是開發(fā)分布式應(yīng)用的重要手段。
6、Java語言是高性能的:與那些解釋型的高級腳本語言相比,Java的確是高性能的。事實(shí)上,Java的運(yùn)行速度隨著JIT(Just-In-Time)編譯器的技術(shù)發(fā)展越來越接近C++。
7、Java語言是健壯性的:Java的強(qiáng)類型機(jī)制、異常處理、垃圾的自動(dòng)收集等是Java程序健壯性的重要保證。對指針的丟棄是Java的明智選擇,Java的安全檢查機(jī)制使得Java更具健壯性。
8、Java語言是解釋型的:Java程序在Java平臺(tái)上被編譯為字節(jié)碼格式,然后可以在實(shí)現(xiàn)這個(gè)Java平臺(tái)的任何系統(tǒng)中運(yùn)行。在運(yùn)行時(shí),Java平臺(tái)中的Java解釋器對這些字節(jié)碼文件進(jìn)行解釋執(zhí)行,執(zhí)行過程中需要的類在連接階段被載入到環(huán)境中運(yùn)行。
9、Java語言是安全的:Java通常被用在網(wǎng)絡(luò)環(huán)境中,為此Java提供了安全機(jī)制,以防惡意代碼的攻擊。除了Java具有的許多安全特性以外,Java對通過網(wǎng)絡(luò)環(huán)境下載的類具有一個(gè)安全防范機(jī)制(類ClassLoder),如分配不同的名字空間,以防替代本地的同名類、字節(jié)碼檢查,并提供安全管理機(jī)制(SecurityManager),讓Java應(yīng)用設(shè)置安全崗兵。
10、Java語言是可移植的:這種移植性來源于體系結(jié)構(gòu)中立性,另外,Java還嚴(yán)格規(guī)定了各個(gè)基本數(shù)據(jù)類型的長度。Java系統(tǒng)本身也具有很強(qiáng)的可移植性,Java編譯器是用Java實(shí)現(xiàn) 的,Java的運(yùn)行環(huán)境是用ANSI C實(shí)現(xiàn)的。(相關(guān)推薦:2020年學(xué)java專業(yè)能做什么,有前景嗎)
11、Java語言是體系結(jié)構(gòu)中立的:Java程序(后綴名為java的文件)在Java平臺(tái)上被編譯為體系結(jié)構(gòu)中立的字節(jié)碼格式(后綴名為class文件),然后可以在實(shí)現(xiàn)這個(gè)Java平臺(tái)的任何系統(tǒng)中運(yùn)行,這種途徑適合于異構(gòu)的網(wǎng)絡(luò)環(huán)境和軟件的分發(fā)。