摘要:的面向的異常遵從通用的異常層次結構。比如以前常用的框架,現在常用的框架包含許多項目,下面挑一些最常用的出來總結一下。狀態是流程中事件發生的地點,在流程中通過轉移的方式從一個狀態到另一個狀態,流程的當前狀況稱為流程數據。
如今做Java尤其是web幾乎是避免不了和Spring打交道了,但是Spring是這樣的大而全,新鮮名詞不斷產生,學起來給人一種凌亂的感覺,我就在這里總結一下,理順頭緒。
Spring Spring 概述Spring 是一個開源框架,是為了解決企業應用程序開發復雜性而創建的(替代更加重量級的企業級Java技術, 尤其是EJB),它完成了大量開發中的通用步驟,留給開發者的僅僅是與特定應用相關的部分,從而大大提高了企業應用的開發效率。
Spring 框架是一個分層架構,由 7 個定義良好的模塊組成。Spring 模塊構建在核心容器之上,核心容器定義了創建、配置和管理 bean 的方式如下圖:
組成 Spring 框架的每個模塊都可以多帶帶存在,或者與其他一個或多個模塊聯合實現。每個模塊的功能如下:
Spring 核心容器:核心容器提供 Spring 框架的基本功能,管理著Spring應用中bean的創建、配置和管理。核心容器的主要組件是 BeanFactory,它是工廠模式的實現。BeanFactory 使用DI將應用程序的配置和依賴性規范與實際的應用程序代碼分開。
Spring 上下文:Spring 上下文是一個配置文件,向 Spring 框架提供上下文信息。提供了一種框架式的對象訪問方法,有些象JNDI注冊器。Context封裝包的特性得自于Beans封裝包,并添加了對國際化(I18N)的支持(例如資源綁定),事件傳播,資源裝載的方式和Context的透明創建,比如說通過Servlet容器。Spring 上下文和Bean工廠都是 bean 容器 的實現。
Spring AOP:通過配置管理特性,Spring AOP 模塊直接將面向方面的編程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何對象支持 AOP。Spring AOP 模塊為基于 Spring 的應用程序中的對象提供了事務管理服務。
Spring DAO:JDBC DAO 抽象層提供了有意義的異常層次結構,可用該結構來管理異常處理和不同數據庫供應商拋出的錯誤消息。異常層次結構簡化了錯誤處理,并且極大地降低了需要編寫的異常代碼數量(例如打開和關閉連接)。Spring DAO 的面向 JDBC 的異常遵從通用的 DAO 異常層次結構。
Spring ORM:Spring 框架插入了若干個 ORM 框架,從而提供了 ORM 的對象關系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有這些都遵從 Spring 的通用事務和 DAO 異常層次結構。
Spring Web 模塊:Web 上下文模塊建立在應用程序上下文模塊之上,為基于 Web 的應用程序提供了上下文。
Spring MVC 框架:MVC 框架是一個全功能的構建 Web 應用程序的 MVC 實現。通過策略接口,MVC 框架變成為高度可配置的,MVC 容納了大量視圖技術,其中包括 JSP、Velocity、Tiles、iText 和 POI。
Spring 核心特點:IOC和AOP控制反轉模式(IOC)也稱作依賴性介入(DI)的基本概念是:不創建對象,但是描述創建它們的方式。在代碼中不直接與對象和服務連接,但在配置文件中描述哪一個組件需要哪一項服務。容器 (在 Spring 框架中是 IOC 容器) 負責將這些聯系在一起。在典型的 IOC 場景中,容器創建了所有對象,并設置必要的屬性將它們連接在一起,決定什么時間調用方法。
Rod Johnson是第一個高度重視以配置文件來管理Java實例的協作關系的人,他給這種方式起了一個名字:控制反轉(Inverse of Control,IoC)。后來Martine Fowler為這種方式起了另一個名稱:依賴注入(Dependency Injection),因此不管是依賴注入,還是控制反轉,其含義完全相同。
當某個Java對象(調用者)需要調用另一個Java對象(被依賴對象)的方法時,在傳統模式下通常有兩種做法
原始做法: 調用者主動創建被依賴對象,然后再調用被依賴對象的方法
簡單工廠模式: 調用者先找到被依賴對象的工廠,然后主動通過工廠去獲取被依賴對象,最后再調用被依賴對象的方法.
注意上面的主動二字,這必然會導致調用者與被依賴對象實現類的硬編碼耦合,非常不利于項目升級的維護。使用Spring框架之后,調用者無需主動獲取被依賴對象,調用者只要被動接受Spring容器為調用者的成員變量賦值即可,由此可見,使用Spring后,調用者獲取被依賴對象的方式由原來的主動獲取,變成了被動接受——所以Rod Johnson稱之為控制反轉。
另外從Spring容器的角度來看,Spring容器負責將被依賴對象賦值給調用者的成員變量——相當于為調用者注入它依賴的實例,因此Martine Fowler稱之為依賴注入。
AOP(Aspect Orient Programming)也就是面向切面編程,作為面向對象編程的一種補充,已經成為一種比較成熟的編程方式。其實AOP問世的時間并不太長,AOP和OOP互為補充,面向切面編程將程序運行過程分解成各個切面。
AOP專門用于處理系統中分布于各個模塊(不同方法)中的交叉關注點的問題,在JavaEE應用中,常常通過AOP來處理一些具有橫切性質的系統級服務,如日志、事務管理、安全檢查、緩存、對象池管理等,AOP已經成為一種非常常用的解決方案。
在典型的面向對象開發方式中,可能要將日志記錄語句放在所有方法和 Java 類中才能實現日志功能。在 AOP 方式中,可以反過來將日志服務模塊化,并以聲明的方式將它們應用到需要日志的組件上,這樣 Java 類就不需要知道日志服務的存在,也不需要考慮相關的代碼。所以,用 Spring AOP 編寫的應用程序代碼是松散耦合的。
Spring 優點總結低侵入式設計,代碼的污染極低:很多框架通過強迫應用繼承它們的類或實現它們的接口而導致應用與框架綁死,而Spring是通過spring特有的注解和通用的pojo結合。Spring的非侵入編程模型意味著這個類在Spring應用和非Spring應用中都可以發揮同樣的作用。Spring的組件就是普通的Java Bean,這也使得單元測試可以不再依賴容器,編寫更加容易。
使用模板消除樣板式代碼: 如Spring的JdbcTemplate使得執行數據庫操作時避免傳統的JDBC樣板代碼(創建一個數據庫連接,然后再創建一個語句對象,最后你才能進行查詢,關閉數據庫連接、語句和結果集)成為了可能。
獨立于各種應用服務器:基于Spring框架的應用,可以真正實現Write Once,Run Anywhere的承諾。
Spring的IoC容器降低了業務對象替換的復雜性,降低了了組件之間的耦合性:對象的依賴關系將由系統中負責協調各對象的第三方組件在創建對象的時候進行設定,所以對象無需自行創建或管理它們的依賴關系,依賴關系將被自動注入到需要它們的對象當中去。而且如果一個對象只通過接口而不是具體實現或初始化過程來表明依賴關系,那么這種依賴就能夠在對象本身毫不知情的情況下,用不同的具體實現進行替換。
Spring的AOP支持允許將一些通用任務如安全、事務、日志等進行集中式管理: 將核心業務和系統服務分離,保持POJO的簡單性和內聚性,從而使他們各自達到更好的復用。
Spring的ORM和DAO提供了與第三方持久層框架的良好整合,并簡化了底層的數據庫訪問:
Spring的高度開放性,并不強制應用完全依賴于Spring,開發者可自由選用Spring框架的部分或全部:當Spring不能滿足需求時, 完全可以考慮其他選擇。事實上, Spring甚至提供了與其他第三方框架和類庫的集成點, 這樣你就不需要自己編寫這樣的代碼了。比如以前常用的SSH框架,現在常用的SSM框架
Spring包含許多項目,下面挑一些最常用的出來總結一下。
Spring MVCSpring MVC是Spring中的基礎 Web 框架,基于模型-視圖-控制器(Model-View-Controller,MVC)模式實現,它能夠幫你構建像Spring框架那樣靈活和松耦合的Web應用程序。
在該框架下,一次web請求大致可以分為如下圖幾個步驟,這些劃分分離了職責,使得代碼靈活、維護性更好。
為了使用該框架,我們首先要配置DispatchServlet,也就是前端控制器,然后啟用Spring MVC,并編寫控制器,視圖,模型等等。
其中,DispatcherServlet是Spring MVC的核心,DispatcherServlet啟動的時候,它會創建Spring應用上下文,并加載配置文件或配置類中所聲明的bean或者自動掃描的bean,但是在Spring Web應用中,通常還會有另外一個應用上下文,這個應用上下文是由ContextLoaderListener創建的。DispatcherServlet加載包含Web組件的bean,如控制器、視圖解析器以及處理器映射,而ContextLoaderListener要加載應用中的其他bean,通常是驅動應用后端的中間層和數據層組件。
Spring MVC是一個強大靈活的Web框架。借助于注解,Spring MVC提供了近似于POJO的開發模式,這使得開發處理請求的控制器變得非常簡單,同時也易于測試。而且Spring MVC還支持多種視圖解析器如JSP,Tiles,Thymeleaf,使得前端界面的功能更強大,編寫更容易。
Spring Web FlowSpring Web Flow是Spring MVC的一個擴展, 它為基于流程的會話式Web應用(購物車或者向導功能)提供了支持。簡言之,它是一個流程框架,能夠引導用戶執行一系列向導步驟。
在Spring Web Flow中,流程是由三個主要元素定義的:狀態、轉移和流程數據。狀態( State)是流程中事件發生的地點,在流程中通過轉移的方式從一個狀態到另一個狀態,流程的當前狀況稱為流程數據。
狀態分為:
行為( Action) 行為狀態是流程邏輯發生的地方
決策( Decision) 決策狀態將流程分成兩個方向, 它會基于流程數據的評估結果確定流程方向
結束( End) 結束狀態是流程的最后一站。 一旦進入End狀態, 流程就會終止
子流程( Subflow) 子流程狀態會在當前正在運行的流程上下文中啟動一個新的流程
視圖( View) 視圖狀態會暫停流程并邀請用戶參與流程
轉移連接了流程中的狀態。流程中除結束狀態之外的每個狀態,至少都需要一個轉移,這樣就能夠知道一旦這個狀態完成時流程要去向哪里。狀態可以有多個轉移,分別對應于當前狀態結束時可以執行的不同的路徑。
當流程從一個狀態進行到另一個狀態時,它會帶走一些流程數據。有時候,這些數據只需要很短的時間(可能只要展現頁面給用戶)。有時候,這些數據會在整個流程中傳遞并在流程結束的時候使用。
Spring Web Flow 可以構建會話式應用程序的Web框架,這是好的,但是感覺其配置只能用xml這個設計不太合理,尤其是當bean很多或者流程節點很多時都不好維護。
Spring Security安全對于許多應用都是一個非常關鍵的切面,因為安全性是超越應用程序功能的一個關注點,應用系統的絕大部分內容都不應該參與到與自己相關的安全性處理中。盡管我們可以直接在應用程序中編寫安全性功能相關的代碼,但更好的方式還是將安全性相關的關注點與應用程序本身的關注點進行分離,作為系統的一個切面。Spring Security就是通過AOP和Filter來為應用程序實現安全性的。
使用Servlet規范中的Filter保護Web請求并限制URL級別的訪問。Spring Security還能夠使用Spring AOP保護方法調用——借助于對象代理和使用通知,能夠確保只有具備適當權限的用戶才能訪問安全保護的方法。
Spring Security非常靈活,能夠基于各種數據存儲來認證用戶。它內置了多種常見的用戶存儲場景,如內存、關系型數據庫以及LDAP。但我們也可以編寫并插入自定義的用戶存儲實現。
當為瀏覽器渲染HTML內容時,你可能希望視圖中能夠反映安全限制和相關的信息。一個簡單的樣例就是渲染用戶的基本信息( 比如顯示“您已經以……身份登錄”)。或者你想根據用戶被授予了什么權限,有條件地渲染特定的視圖元素。Spring Security本身提供了一個JSP標簽庫,而Thymeleaf通過特定的方言實現了與Spring Security的集成。借助于這些,可以很容易的實現對視圖的保護。
Spring DataSpring Data 是為了簡化構建基于 Spring 框架應用的數據訪問技術,包括關系數據庫、NoSQL、Map-Reduce 框架、云數據服務等等,旨在提供一種通用、統一的編碼模式(但是并不是代碼完全一樣),使得在Spring中使用任何數據庫都變得非常容易。
Spring Data作為Spring Source的其中一個父項目,旨在統一和簡化對各類型持久化存儲,而不拘泥于是關系型數據庫還是NoSQL數據存儲。
目前的Spring Data 包含如下的模塊(或者說子項目):
Spring Data Commons
Spring Data JPA
Spring Data KeyValue
Spring Data LDAP
Spring Data MongoDB
Spring Data Gemfire
Spring Data REST
Spring Data Redis
Spring Data for Apache Cassandra
Spring Data for Apache Solr
Spring Data Couchbase (community module)
Spring Data Elasticsearch (community module)
Spring Data Neo4j (community module)
無論是哪種持久化存儲,數據訪問對象(DAO,即Data Access Objects)通常都會提供對單一域對象的CRUD(創建、讀取、更新、刪除)操作、查詢方法、排序和分頁方法等。Spring Data則提供了基于這些層面的統一接口(CrudRepository,PagingAndSortingRepository)以及對持久化存儲的實現。
你可能接觸過某一種Spring模型對象——比如JdbcTemplate——來編寫訪問對象的實現。但是在基于Spring Data的數據訪問對象,我們只需定義和編寫一些查詢方法的接口(基于不同的持續化存儲, 定義有可能稍有不同),Spring Data會在運行時間生成正確的實現。
所有Spring Data的子項目都支持:
模板:處理資源分配和異常處理
對象、數據存儲映射:如ORM
對數據訪問對象的支持: 幫助我們編寫一些模板式語句如分頁排序
然而一些Spring Data子項目,如Spring Data Redis和Spring Data Riak都只是提供模板,這是由于其相應的數據存儲都只支持非結構化的數據,而不適用于對象的映射和查詢。
Spring BootSpring誕生時是Java企業版(Java Enterprise Edition, JEE,也稱J2EE)的輕量級代替品。無需開發重量級的Enterprise JavaBean(EJB),Spring為企業級Java開發提供了一種相對簡單的方法。
雖然Spring的組件代碼是輕量級的,但它的配置卻是重量級的。一開始,Spring用XML配置,而且是很多的XML配置,即使后來有基于注解的改善,我們依然難逃大量配置的魔爪。而Spring Boot讓這一切成為了過去,如果說Spring的目的是簡化程序的開發,那么Spring Boot就是為了簡化Spring本身的開發。
Spring Boot依賴于自動配置技術將Spring應用中樣板式的配置移除掉,這樣就能讓我們免受于一大堆的配置之苦,更加專注于業務功能。Spring Boot同時還提供了多個Starter項目,拿來即可用,極大地簡化了編程任務。
它提供了四個主要的特性,能夠改變開發Spring應用程序的方式:
Spring Boot Starter: 它將常用的依賴分組進行了整合,將其合并到一個依賴中,這樣就可以一次性添加到項目的Maven或Gradle構建中,這里可以找到目前所有的starter項目。
自動配置: Spring Boot的自動配置特性利用了Spring 4對條件化配置的支持,合理地推測應用所需的bean并自動化配置它們,減少了你自己需要配置的數量。
命令行接口(Command-line interface,CLI):Spring Boot的CLI發揮了Groovy編程語言的優勢,并結合自動配置進一步簡化Spring應用的開發。
Actuator: 它為Spring Boot應用添加了一定的管理特性。
Spring Cloud在進入主題之前,首先來看看微服務,簡單說來就是將原本單個獨立的大系統拆分為分布式的多個小型的服務,這些小型服務各自獨立運行,他們通過HTTP和RestFul API進行通信。
一個微服務一般完成某個特定的功能,比如下單管理、客戶管理等等。每一個微服務都是微型六角形應用,都有自己的業務邏輯和適配器。一些微服務還會發布API給其它微服務和應用客戶端使用。其它微服務完成一個Web UI,運行時,每一個實例可能是一個云VM或者是Docker容器。
微服務具有分布式系統的特性,如服務發現,負載均衡,故障轉移,多版本,灰度升級,服務降級,分布式跟蹤。
Spring Cloud是一套完整的分布式系統解決方案,它的子項目涵蓋了所有實現分布式系統所需要的基礎軟件設施(包括配置管理、服務治理、智能路由、全局鎖等等)。基于Spring Boot,Spring Boot做較少的配置,便可成為Spring Cloud中的一個微服務,使用Spring Cloud的開發者可以快速的啟動服務或構建應用、同時能夠快速和云平臺資源進行對接,使得開發部署極其簡單。
Spring Cloud專注于提供良好的開箱即用經驗的典型用例和可擴展性機制覆蓋:
分布式/版本化配置:Spring Cloud Config
服務注冊和發現:Netflix Eureka 或者 Spring Cloud Eureka(對前者的二次封裝)
路由:Spring Cloud Zuul 基于 Netflix Zuul
service - to - service調用:Spring Cloud Feign
負載均衡:Spring Cloud Ribbon 基于 Netflix Ribbon 實現
斷路器:Spring Cloud Hystrix
分布式消息傳遞:Spring Cloud Bus
后記總結了一大堆,感覺Spring Boot是趨勢,畢竟效率是王道。然后就是Spring Data的各個項目,因為如今的數據源是越發的豐富。最后,近幾年微服務的概念挺火的,所以Spring Cloud也要多多了解。
閱讀原文:Mageek`s Wonderland
參考與感謝IBM developerWorks 中國
Spring基礎知識匯總
Spring 實戰
Spring Data —— 完全統一的API?
Spring Cloud Dalston
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/70558.html
摘要:框架最初是由編寫的,并且年月首次在許可下發布。在一個方法執行之后,只有在方法退出拋出異常時,才能執行通知在建議方法調用之前和之后,執行通知。方法執行之后,不考慮其結果,執行通知。 導讀: 在上篇文章的結尾提到了Spring Boot 提供了一系列的框架整合(Starter POMs)幫助我們提升開發效率,但是這并不意味著我們不需要學習這些框架,反而更需要去學習,通過學習這些框架可以使...
摘要:基于的架構實戰案例配置文件屬性內容加解密使用過配置文件的朋友都知道,資源文件中的內容通常情況下是明文顯示,安全性就比較低一些。,官方給出的釋意是項目也采用此加密組件,結合使用。 基于SpringCloud的Microservices架構實戰案例-配置文件屬性內容加解密 使用過SpringBoot配置文件的朋友都知道,資源文件中的內容通常情況下是明文顯示,安全性就比較低一些。打開appl...
摘要:圖片抓取簡單一覽項目目的通過示例項目,初步接觸,等常用工具,熟悉常用環境使用通過獲取美食杰數據,使用來解析數據并抓取處理目標數據。示例中要識別出地址中的圖片地址。 【圖片抓取】002-簡單一覽 [toc] 項目目的 通過示例項目,初步接觸spring boot,maven等常用工具,熟悉常用JAVA環境;使用通過httpclient獲取美食杰html數據,使用jsoup來解析html數...
摘要:今天逛了逛,順手精選出了一下近幾個月以來上最熱門的個項目。相關閱讀正式開源,幫助應用快速容器化未來可能會上熱門的項目地址介紹哈哈,皮一下很開心。這是我自己開源的一份文檔,目前仍在完善中,歡迎各位英雄好漢一起完善。 showImg(https://segmentfault.com/img/remote/1460000015766827?w=391&h=220);今天逛了逛Github,順...
摘要:哪吒社區技能樹打卡打卡貼函數式接口簡介領域優質創作者哪吒公眾號作者架構師奮斗者掃描主頁左側二維碼,加入群聊,一起學習一起進步歡迎點贊收藏留言前情提要無意間聽到領導們的談話,現在公司的現狀是碼農太多,但能獨立帶隊的人太少,簡而言之,不缺干 ? 哪吒社區Java技能樹打卡?【打卡貼 day2...
閱讀 2548·2023-04-25 19:47
閱讀 3388·2019-08-29 17:18
閱讀 858·2019-08-29 15:26
閱讀 3364·2019-08-29 14:17
閱讀 1127·2019-08-26 13:49
閱讀 3342·2019-08-26 13:22
閱讀 3027·2019-08-26 10:44
閱讀 2698·2019-08-23 16:51