一、核心特性
二、數據存儲
三、Web 技術
四、技術整合
五、測試
記錄小馬哥的講解
爲了避免從入門到勸退,本人把小馬哥視頻中講解的語言記錄下來了,部分語言稍作修改。
1、核心特性包括 第一,IoC 容器、老生常談的啦。
第二,Spring 事件(是基於java的標準事件進行擴展的,但是和java的標準事件還有些區別,後面詳細描述。)
第三,資源管理也是繼承於Java的一些資源管理,有些API是借鑑了Java核心的底層API的一個實現。
第四,國際化,Java其實默認就支持國際化,因此Spring國際化也是基於Java API進行實踐的。
第五,校驗,Java JDK底層是沒有提供的,是Spring自己做了一些特殊的一些API設置。比如借鑑Bean Validation, Spring在它的Framework裏面做了Bean Validation的一個整合。
第六,數據綁定,在Java裏面也沒有特別實現,是Spring特有的實現。簡單說是,外面的屬性和Java 的 POJO的Setter、Getter來進行一個數據上的轉化和綁定。
第七,類型裝換,有了數據綁定,就會涉及到類型轉換,也是Spring核心特性之一。能夠幫助我們進行更好的有擴展性的類型轉換。
第八,Spring 表達式,和JSP表達式是如出一轍的,在JSP裏面可以通過符號的方式引用變量,達到實現動態調用的目的。
第九,面向切面編程,常說的AOP。
2、數據存儲包括 第一,JDBC,關係型數據庫務必會和JDBC打交道,只不過是在JDBC上面做了一些封裝,比如MyBatis、Hibernete。JDBC是java API和數據庫打交道的一個通道,Spring在此做了相應的實現,比如 jdbcTemplate。
第二,事務抽象,面試必考的內容,實際上來源於EJB, Spring 只不過在上面做了一些簡化操作。事物的抽象在實現中有一個單獨的API或者單獨的規範來進行實現,Spring也只是做了一些簡單的封裝。
第三,DAO 支持,Spring做了很大的封裝,簡化DAO的一個寫法和實現方式,比如常見的SQLException。
第四,O/R映射,早期瞭解到Spring對Hibernete的支持,Spring對JDO的支持,後面JPA替代了JDO,JPA默認的實現就是Hibernete,因此討論JPA和討論Hibernete是討論一個東西。
第五,編列,把 xml 和Java的序列號進行對比的話,Java的序列化就相當於這裏的編列,反序列化就是反編列。熟悉JAXB(Java API for XML Binding)的話,會對此有了解。
3、Web技術包括 Web Servlet 技術棧,Web Reactive 技術棧。
第一,按照版本的分佈, Web Servlet 技術棧是從Spring 1 到 Spring 4版本的唯一支持,從Spring 5纔開始引入Web Reactive 技術棧。
第二,Reactive 技術棧包括Spring WebFlux、Spring MVC,其實這兩個在註解上面是一模一樣的,只是底層的實現發生了變化。傳統的Spring MVC是需要Servlet引擎進行支撐的。
第三,Reactive通常默認情況下是Netty的 Web server。當然Reactive也是可以運用Spring MVC 的引擎進行實現的,也就是說可以用到Servlet引擎進行實現。於此不同的是Servlet規範裏面在3.0以後規劃是對websocket進行支持,那麼Web Servlet 技術棧也會有這方面的支持。關於SockJS也是一個技術棧,這裏不做討論。
第四,關於 Reactive的兩個部分理解,一個是WebSocket,一個是WebClient,在早期的時候,Spring框架5.0之前,有個東西叫RestTemplete或者叫HttpClient是一個同步的Http的執行客戶端,那麼WebClient引用之後,它把過去的同步執行變成異步回調的方式。其實Web Reactive和Spring MVC 幾乎如出一轍,只不過在API封裝上面做出了一些變化。
4、技術整合,內容比較龐雜,相當於是一個生態的整合。
第一,遠程調用(Remoting ),有幾種方式的實現,比如:RMI, Java標準的遠程方法調用; Hessian社區開源的一個方案,Dubbo是基於Hessian協議的。那麼Spring Framework做了一層封裝,無論你是基於HTTP的調用還是常說的Hessian調用,都可以通過統一的封裝來執行方法的調用得到結果。和之前講的Reactive不同點是,通常來說遠程的調用是採用同步的模式。那麼異步的模式如下面所講的Java的消息服務。
第二,消息服務(JMS),全稱Java Message Service,這是一個異步的調用用傳統的JMS規範來實現。比如說ActiveMQ,但是Kafka, RocketMQ,等並不是用傳統的JMS規範來實現的。
第三,Java 連接架構,Java EE的一套架構,主要是統一一些Java的資源連接(如JDBC連接)。
第四,Java 管理擴展(JMX),全稱 Java Management Extensions,用於Java的一個管理。對於大多數程序員來說,關注的是開源側、開發側,不太關注運維側,比如,cpu利用率,磁盤利用率,都可以通過JMX來進行查詢。
第五,Java郵件客戶端,頂不住了,不寫了,都是介紹,後面詳細瞭解,這裏瞭解目錄大概。