日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

collect的功能是什么?其底层如何实现的?_为什么你要用 Spring ?

發(fā)布時間:2024/7/23 javascript 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 collect的功能是什么?其底层如何实现的?_为什么你要用 Spring ? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

現(xiàn)在Spring幾乎成為了Java在企業(yè)級復(fù)雜應(yīng)用開發(fā)的代名詞,得益于Spring簡單的設(shè)計哲學(xué)和其完善的生態(tài)圈,確實為廉頗老矣,尚能飯否的 Java 帶來了“春天”,有很多同學(xué)剛接觸Java就直接從Spring框架開始學(xué)習(xí),導(dǎo)致產(chǎn)生了很多疑惑,甚至有很多同學(xué)只知道用Spring,并不了解其中的原理,例如:

  • Spring框架為我們做了什么,沒有Spring框架前我們的程序是什么樣的?
  • 為什么要把對象放在Spring容器里面,為什么我不能直接new對象?
  • 為什么要把Sevlet交給Spring MVC管理,我自己寫Sevlet處理HTTP請求不行嗎?

Spring為什么要封裝這么多的 Template(JDBCTemplate,RestTemplate等……)它想要干什么?

Spring 生態(tài)遍地開發(fā)(SpringBoot,SpringCloud 等等),本篇文章不會深入探討Spring 每個框架的實現(xiàn)細節(jié),只會大概講Spring Framework背后的設(shè)計理念和它為我們所做的事情,讓大家知其然并知其所以然,可以在用 Spring 的時候能知悉底層和內(nèi)部細節(jié)發(fā)生的事情,如果是對于 Spring Frameword 和其生態(tài)框架的細節(jié)有興趣的同學(xué)可以在詳盡的閱讀官方的文檔,https://spring.io/projects(這應(yīng)該是我見過寫的最好的技術(shù)文檔之一)

Spring 為我們做了哪些事情?

Spring 全家桶框架眾多,但主要的設(shè)計原則簡單來說,離不開這幾點:

  • 通過代碼解耦,提高代碼靈活性(依賴注入 DI)
  • 簡化開發(fā),用最少的代碼,做最多的事情(AOP,Template)
  • 提供公共抽象,屏蔽底層,開箱即用,替換方便(Spring Cache,框架,中間件集成)
  • MVC模型的快速實現(xiàn)(視圖解析,數(shù)據(jù)轉(zhuǎn)換)

下面拆開來說說這幾點,為我們帶來什么好處,最后探討下,如果沒有 Spring 用原生的 J2EE 我們的程序會變成什么樣

先說說 Spring Framework 的核心功能,DI 依賴注入,AOP 面向切面編程

依賴注入也叫 IOC 控制反轉(zhuǎn),依賴注入是編程大師 Martin Fowler 提出來的,我個人比較喜歡依賴注入這個名詞,感覺比控制反轉(zhuǎn)更具有表達性,也更容易理解

那么依賴注入為我們做了什么 ?

  • 靈活:依提供的面向接口的編程方法,為類和類之間建立更靈活的關(guān)系
  • 解耦:移除了直接在程序中 new 實例的高耦合做法
  • 方便:要替換類的實現(xiàn),只需要在 Spring 容器中更換聲明,無需改動代碼

那么 AOP 面向切面又為我們做了什么?

  • 消除重復(fù)的模板代碼(性能監(jiān)控,異常封裝,參數(shù)跟蹤等……)
  • 更代碼結(jié)構(gòu)更加整潔,通用的邏輯基本都可以用 AOP 來處理
  • Spring 的聲明式事務(wù)就是 Spring AOP 的優(yōu)秀實現(xiàn)案例

還為我們做了什么其他的事情?

  • Spring JdbcTemplate 消除了JDBC API令人詬病的模板代碼
  • Spring Cache 提供緩存功能,并且無需關(guān)心底層緩存組件細節(jié)(Ehcache,Guava,JSR-107 Cache等……)
  • Spring DAO 提供連接池功能,并且無需關(guān)心底層連接池組件細節(jié)(C3P0,DBCP等……)
  • 提供 定時任務(wù)功能 集成(Quartz,JDK Timer,Executor)
  • 整合ORM框架,測試框架集成
  • 快速實現(xiàn)MVC模型,并且集成Sring,數(shù)據(jù)處理,視圖解析等都由Spring處理

以上等等功能,都是 Spring 框架為我們做處理的事情

當然 Spring 生態(tài)里還有非常多的框架來簡化我們的日常開發(fā),提高開發(fā)效率,常用的例如:

  • Spring Boot (無需配置,快速開發(fā),啟動,集成生產(chǎn)級的監(jiān)控指標)
  • Spring Cloud(快速實現(xiàn)微服務(wù)的框架,提供系列微服務(wù)的組件框架)
  • Spring Shrio(基于角色資源的安全框架,利用AOP實現(xiàn)鑒權(quán)等安全訪問的功能)
  • Spring Data(提供數(shù)據(jù)訪問實現(xiàn),包括非關(guān)系數(shù)據(jù)庫,關(guān)系數(shù)據(jù)庫,云數(shù)據(jù)服務(wù)等)

假如沒有 Spring ?

讓我們想象一下,假如沒有 Spring,我們在做企業(yè)級應(yīng)用開發(fā)會大概會發(fā)生什么事情?

  • 類和類之間通過 new 建立關(guān)系,充滿耦合,小處改動都要修改大量代碼
  • 充滿和業(yè)務(wù)無關(guān)的模板代碼,10行代碼可能只有1行是業(yè)務(wù)邏輯
  • 大量的事務(wù),異常,JDBC的模板處理代碼,不僅代碼極度脆弱,容易出錯,而且可讀性極差,基本不可維護
  • 你要為每個請求寫一個 Servlet 處理,并且自己處理 request/response,Servlet 也充斥著大量重復(fù)的模板代碼
  • 你項目的代碼量可能會比現(xiàn)在多很多

以上,你是如何看待 Spring 帶來的復(fù)雜性和提供的便利性?現(xiàn)在 Spring 體系也越來越龐大,貌似與它剛開始對抗 EJB 的時候所提出的輕量級,簡單的設(shè)計原則開始背道而馳,關(guān)于這點你又是怎么評價呢?個人知識有限,不喜勿噴,歡迎發(fā)表評論和分享你的觀點和看法。

總結(jié)

以上是生活随笔為你收集整理的collect的功能是什么?其底层如何实现的?_为什么你要用 Spring ?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。