一揉燃、什么是Spring?
Spring是2003年興起的一個輕量級的Java開源的開發(fā)框架,核心思想由Rod Johnson在《Expert one on one J2EE design and development》提出
Spring是為了解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性而創(chuàng)建
Spring的核心思想是控制翻轉(zhuǎn)(IoC)和面向切面(AOP)肝陪。簡單來說友酱,Spring是一個分層的JavaSE/EE full-stack(一站式)輕量級開源框架
二晴音、如何學(xué)習(xí)Spring
可以參考腦圖內(nèi)容進(jìn)行細(xì)致的學(xué)習(xí)
三、Why Spring粹污?
- 令人更加方便段多,愉快的coding
- 應(yīng)用程序代碼并不依賴于spring APIs
- Spring不和現(xiàn)有的解決方案競爭,而是致力于將它們?nèi)诤显谝黄?/li>
四壮吩、Spring的特點(diǎn)及優(yōu)勢
1.控制反轉(zhuǎn)(IoC)
Inversion of Control进苍,縮寫為IoC,也叫依賴注入(Dependency Injection鸭叙,簡稱DI)
為什么要使用IoC
Ioc控制反轉(zhuǎn)是指將我們new對象的過程觉啊,交由Ioc容器去創(chuàng)建,而和目的就是
解耦
降低模塊之間的耦合度在這之前我們先來說一下
依賴倒置原則
- 1沈贝、高層模塊不應(yīng)該依賴底層模塊杠人,二者都應(yīng)該依賴抽象。
- 2宋下、抽象不應(yīng)該依賴細(xì)節(jié)嗡善,細(xì)節(jié)應(yīng)該依賴抽象
- 3、依賴倒置原則的中心核心就是面向接口編程
- 4学歧、使用接口和抽象類指定好規(guī)范罩引,而不設(shè)計(jì)任何具體的實(shí)現(xiàn),把細(xì)節(jié)交由它們的實(shí)現(xiàn)來完成
舉個例子
在不使用Ioc的情況我們想要完成一個curd功能需要這樣枝笨,一步步創(chuàng)建對象袁铐,在依次組裝揭蜒,然后調(diào)用
UserDAO dao = new UserDAO("mysql");
UserService service = new UserService(dao);
Controller controller = new Controller(service);
那么這么做的弊端也就是不好之處是什么呢?
- 創(chuàng)建過程復(fù)雜繁瑣剔桨,模塊之間依賴性太強(qiáng)屉更,造成模塊之間強(qiáng)耦合
- 違背了
依賴倒置原則
;當(dāng)具體的實(shí)現(xiàn)發(fā)生改變洒缀,那么在使用的每一處代碼都需要進(jìn)行更改
接下來說說使用Ioc的好處
- 對象之間依賴接口瑰谜,不依賴于具體的實(shí)現(xiàn),降低了對象之間的耦合度
- 上層不需要知道下層是如何創(chuàng)建的帝洪;說的就是面向接口和抽象
IoC和DI兩者之間的關(guān)系
Ioc是一種軟件設(shè)計(jì)的思想似舵,而DI就是它的具體實(shí)現(xiàn)
2.面向切面(AOP)
通過分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級服務(wù)、進(jìn)行內(nèi)聚性開放
應(yīng)用對象只實(shí)現(xiàn)它們應(yīng)該做的葱峡,即業(yè)務(wù)邏輯砚哗,如日志或事物支持
順便將解釋一下,內(nèi)聚性就是指高內(nèi)聚
:A模塊擁有它應(yīng)該擁有的所有功能砰奕,不需要依賴其他的模塊蛛芥,拆到不能再拆(微服務(wù)的最小服務(wù)、最小原子操作)
關(guān)于AOP這里我畫了一張簡易圖供參考
3.強(qiáng)大的框架支持及兼容
Spring不和現(xiàn)有解決方案競爭军援,而是致力于將它們?nèi)诤显谝黄?
如Hibernate仅淑,status2;
4.豐富的內(nèi)部功能支持
自帶SpringMvc、JdbcTemplate胸哥、RedisTemplate
5.容器化管理
- 管理應(yīng)用對象的配置和生命周期
- 容器化存儲對象
6.聲明式事物管理
基于AOP的聲明式管理開發(fā)涯竟,只需要關(guān)注業(yè)務(wù)邏輯,無需關(guān)注事物本身的邏輯處理代碼
7.強(qiáng)大的單元測試
Spring支持對Junit單元測試的支持
無需容器即可對功能進(jìn)行測試
支持?jǐn)?shù)據(jù)Mock等
8.完善的開源社區(qū)
Spring整個框架體系完事空厌、架構(gòu)精妙庐船、代碼精致優(yōu)良、大師級作品嘲更、設(shè)計(jì)模式應(yīng)用靈活筐钟、對JAVA的應(yīng)用淋漓盡致、造詣高深赋朦、且Spring已是一個完整的社區(qū)生態(tài)
(最后一句話才是重點(diǎn)篓冲,嘿嘿)
這里給大家截圖了一下Spring官網(wǎng)的Projects,可以看下為什么說它是一個完整的生態(tài)圈