前言
最近廓块,公司傳來“噩耗”:公司統(tǒng)一技術(shù)棧赤兴,一律使用java語言開發(fā),沒得商量。此時乏冀,作為“世界上最好語言”的phper博主,心情如下:
好吧啊片,開玩笑的涛浙。畢竟作者一貫的理念是“語言只是工具”,so然磷,語言什么的無所謂~(實在是最近行業(yè)不景氣…………)
說說作者的情況吧郑趁,從業(yè)5年多,因為業(yè)務(wù)需要姿搜,java安卓寡润,c++,python基本上學(xué)了個遍舅柜,正常都是為了實現(xiàn)某個業(yè)務(wù)模塊去自學(xué)一個語種梭纹,所以,自認(rèn)為對java還是有點基礎(chǔ)的致份。于是变抽,開始了spring的學(xué)習(xí)(坑)之路~
技術(shù)選型
基于目前的現(xiàn)狀,基本上沒什么選擇知举,上spring全家桶吧瞬沦。早期還有不少基于Struts1&Struts2的項目,但是因為著名的RCE(遠(yuǎn)程代碼執(zhí)行)漏洞導(dǎo)致大批開發(fā)者遠(yuǎn)離雇锡。當(dāng)然逛钻,基于一些歷史原因,Struts還是有不少的市場的锰提。
spring概念
spring系列的框架有一堆曙痘,總是不經(jīng)意間會被srping、springMVC立肘、SpringBoot 边坤,SpringBoot 這些東西繞暈,它們都是什么谅年?彼此間又是什么關(guān)系茧痒?
- spring
spring 是一個輕量級的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器,Java 開發(fā)框架,spring是為了簡化企業(yè)級開發(fā)的框架融蹂,在實際開發(fā)中還是需要配置xml文件或者javaconfig文件旺订,并且需要考慮各個框架之間的融合性問題弄企。
IoC:控制反轉(zhuǎn),一種設(shè)計思想区拳,它是spring的核心拘领。
對于spring框架來說,就是由spring來負(fù)責(zé)控制對象的生命周期和對象間的關(guān)系樱调。對于這個描述還是不理解的話约素,
你需要找個女盆友(男盆友也行),要求是S型曲線笆凌,瓜子臉圣猎,膚白貌美……,顯然除了你一個個去找沒有其它辦法菩颖。但是現(xiàn)在有了“中介”样漆,你直接把你的要求告訴中介,中介直接給你提供“對象”晦闰,是不是很爽放祟?,是的呻右,IoC干的這樣的事跪妥。簡而言之,對象交給 spring (IoC)控制管理声滥,而不是傳統(tǒng)的由你在對象內(nèi)部直接控制眉撵。
AOP:傳統(tǒng)OOP面向?qū)ο缶幊蹋谖覀儗嶋H開發(fā)中都會有具體的業(yè)務(wù)模塊需求落塑,但是我們在實現(xiàn)這些業(yè)務(wù)模塊功能的時候纽疟,經(jīng)常要干一些額外的不可避免的事情,比如事務(wù)的管理憾赁,日志的記錄等污朽,并且在每個業(yè)務(wù)模塊都必須要實現(xiàn)一次,這就導(dǎo)致代碼的重復(fù)和耦合龙考。AOP把軟件分為兩個部分:核心業(yè)務(wù)邏輯組件和橫切關(guān)注點蟆肆。核心業(yè)務(wù)邏輯就是我們要實現(xiàn)的業(yè)務(wù)邏輯,而像日志晦款、驗證炎功、事務(wù)等等這些與核心業(yè)務(wù)邏輯不想關(guān)的稱為橫切關(guān)注點。
已實現(xiàn)一個系統(tǒng)的登錄舉例缓溅,
我們可以把業(yè)務(wù)流程1和業(yè)務(wù)流程2看做核心業(yè)務(wù)邏輯(豎著看)蛇损,但是橫著的驗證,日志記錄等這些不屬于核心業(yè)務(wù)邏輯卻必須要做(不做這些你試試?)淤齐,橫著的這部分就叫做橫切關(guān)注點束世,整體上看就像驗證日志這些功能橫著切入豎著的核心業(yè)務(wù)流程當(dāng)中去的,有木有很形象床玻?!
AOP的好處不言而喻:
1.橫切關(guān)注點都集中于一塊沉帮,不會出現(xiàn)大量重復(fù)代碼锈死;
2.核心模塊只關(guān)注核心功能的代碼,模塊間藕合度降低穆壕。
簡而言之待牵,AOP就是在運行時,動態(tài)地將代碼切入到類的指定方法喇勋、指定位置上的編程思想缨该。
- springMVC
springMVC主要處理web開發(fā)的路徑映射和視圖渲染,屬于spring框架中WEB層開發(fā)的一部分川背。我們可以把spring和mvc分開理解贰拿,mvc相信各位開發(fā)者都很了解,簡言之就是c(控制器)將v(視圖)與m(模塊業(yè)務(wù))分開構(gòu)成了mvc熄云,spring作為專業(yè)的開發(fā)web項目的開源框架膨更,springMVC為內(nèi)部的一個模塊環(huán)節(jié),同樣采取mvc設(shè)計模式缴允。 所以在使用spring開發(fā)web項目時荚守,作為核心環(huán)節(jié)的MVC可以使用struts1/struts2/springMVC等
- springboot
使用spring整合基礎(chǔ)框架時會發(fā)現(xiàn)如下兩點:
- 整了半天云里霧里不知道在干什么
- 手動配置很是繁瑣
此時,springboot閃亮登場练般。主要特點如下:
- 注解會給使用者提供方便
- 對第三方技術(shù)進(jìn)行了很好的封裝和整合矗漾,提供了大量第三方接口
- 可以通過依賴自動配置,不需要XML等配置文件
- 提供了安全等特性
- springcloud
springcloud是微服務(wù)解決方案薄料,非常方便敞贡,是基于springboot的。
總結(jié)
綜上都办,目前可以這么理解
- springMVC是spring框架的一部分
- 快速構(gòu)建項目直接使用springboot即可
- 想比較好的理解springboot最好還是從spring入手嫡锌,這樣對比才能理解springboot到底做了哪些東西
- springcloud是基于springboot提供的微服務(wù)方案