java常使用的框架

1、SpringMVC前端

Spring Web MVC是一種基於Java的實現了Web MVC設計模式的請求驅動類型的輕量級Web框架,即便用了MVC架構模式的思想,將web層進行職責解耦,基於請求驅動指的就是使用請求-響應模型,框架的目的就是幫助咱們簡化開發,Spring Web MVC也是要簡化咱們平常Web開發的。java

模型(Model )封裝了應用程序的數據和通常他們會組成的POJO。程序員

視圖(View)是負責呈現模型數據和通常它生成的HTML輸出,客戶端的瀏覽器可以解釋。web

控制器(Controller )負責處理用戶的請求,並創建適當的模型,並把它傳遞給視圖渲染。redis

Spring的web模型 - 視圖 - 控制器(MVC)框架是圍繞着處理全部的HTTP請求和響應的DispatcherServlet的設計。算法

Spring Web MVC處理請求的流程數據庫

 

具體執行步驟以下編程

一、 首先用戶發送請求————>前端控制器,前端控制器根據請求信息(如URL)來決定選擇哪個頁面控制器進行處理並把請求委託給它,即之前的控制器的控制邏輯部分;圖2-1中的一、2步驟;設計模式

二、 頁面控制器接收到請求後,進行功能處理,首先須要收集和綁定請求參數到一個對象,這個對象在Spring Web MVC中叫命令對象,並進行驗證,而後將命令對象委託給業務對象進行處理;處理完畢後返回一個ModelAndView(模型數據和邏輯視圖名);圖2-1中的三、四、5步驟;api

三、 前端控制器收回控制權,而後根據返回的邏輯視圖名,選擇相應的視圖進行渲染,並把模型數據傳入以便視圖渲染;圖2-1中的步驟六、7;

四、 前端控制器再次收回控制權,將響應返回給用戶,圖2-1中的步驟8;至此整個結束。

2、Spring

2.一、IOC容器:

IOC容器就是具備依賴注入功能的容器,IOC容器負責實例化、定位、配置應用程序中的對象及創建這些對象間的依賴。應用程序無需直接在代碼中new相關的對象,應用程序由IOC容器進行組裝。在Spring中BeanFactory是IOC容器的實際表明者。

2.二、AOP:

簡單地說,就是將那些與業務無關,卻爲業務模塊所共同調用的邏輯或責任封裝起來,便於減小系統的重複代碼,下降模塊間的耦合度,並有利於將來的可操做性和可維護性。AOP表明的是一個橫向的關係

AOP用來封裝橫切關注點,具體能夠在下面的場景中使用:

  • Authentication 權限 

  • Caching 緩存 

  • Context passing 內容傳遞 

  • Error handling 錯誤處理 

  • Lazy loading 懶加載 

  • Debugging  調試 

  • logging, tracing, profiling and monitoring 記錄跟蹤 優化 校準 

  • Performance optimization 性能優化 

  • Persistence  持久化 

  • Resource pooling 資源池 

  • Synchronization 同步 

  • Transactions 事務

3、Mybatis

MyBatis 是支持普通 SQL查詢,存儲過程和高級映射的優秀持久層框架。MyBatis 消除了幾乎全部的JDBC代碼和參數的手工設置以及結果集的檢索。MyBatis 使用簡單的 XML或註解用於配置和原始映射,將接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java對象)映射成數據庫中的記錄。

整體流程:

(1)加載配置並初始化 

觸發條件:加載配置文件 
將SQL的配置信息加載成爲一個個MappedStatement對象(包括了傳入參數映射配置、執行的SQL語句、結果映射配置),存儲在內存中。

(2)接收調用請求 

觸發條件:調用Mybatis提供的API 
傳入參數:爲SQL的ID和傳入參數對象 
處理過程:將請求傳遞給下層的請求處理層進行處理。

(3)處理操做請求 

觸發條件:API接口層傳遞請求過來 
傳入參數:爲SQL的ID和傳入參數對象

處理過程:

(A)根據SQL的ID查找對應的MappedStatement對象。

(B)根據傳入參數對象解析MappedStatement對象,獲得最終要執行的SQL和執行傳入參數。

(C)獲取數據庫鏈接,根據獲得的最終SQL語句和執行傳入參數到數據庫執行,並獲得執行結果。

(D)根據MappedStatement對象中的結果映射配置對獲得的執行結果進行轉換處理,並獲得最終的處理結果。

(E)釋放鏈接資源。

(4)返回處理結果將最終的處理結果返回

MyBatis 最強大的特性之一就是它的動態語句功能。若是您之前有使用JDBC或者相似框架的經歷,您就會明白把SQL語句條件鏈接在一塊兒是多麼的痛苦,要確保不能忘記空格或者不要在columns列後面省略一個逗號等。動態語句可以徹底解決掉這些痛苦。

4、Dubbo

Dubbo是一個分佈式服務框架,致力於提供高性能和透明化的RPC(遠程過程調用協議)遠程服務調用方案,以及SOA服務治理方案。簡單的說,dubbo就是個服務框架,若是沒有分佈式的需求,實際上是不須要用的,只有在分佈式的時候,纔有dubbo這樣的分佈式服務框架的需求,而且本質上是個服務調用的東東,說白了就是個遠程服務調用的分佈式框架。

一、透明化的遠程方法調用,就像調用本地方法同樣調用遠程方法,只需簡單配置,沒有任何API侵入。

二、軟負載均衡及容錯機制,可在內網替代F5等硬件負載均衡器,下降成本,減小單點。

三、 服務自動註冊與發現,再也不須要寫死服務提供方地址,註冊中心基於接口名查詢服務提供者的IP地址,而且可以平滑添加或刪除服務提供者。

節點角色說明: 

  • Provider: 暴露服務的服務提供方。 

  • Consumer: 調用遠程服務的服務消費方。 

  • Registry: 服務註冊與發現的註冊中心。 

  • Monitor: 統計服務的調用次調和調用時間的監控中心。 

  • Container: 服務運行容器。

5、Maven

Maven這個個項目管理和構建自動化工具,愈來愈多的開發人員使用它來管理項目中的jar包。可是對於咱們程序員來講,咱們最關心的是它的項目構建功能。

6、RabbitMQ

消息隊列通常是在項目中,將一些無需即時返回且耗時的操做提取出來,進行了異步處理,而這種異步處理的方式大大的節省了服務器的請求響應時間,從而提升了系統的吞吐量。

RabbitMQ是用Erlang實現的一個高併發高可靠AMQP消息隊列服務器。

Erlang是一門動態類型的函數式編程語言。對應到Erlang裏,每一個Actor對應着一個Erlang進程,進程之間經過消息傳遞進行通訊。相比共享內存,進程間經過消息傳遞來通訊帶來的直接好處就是消除了直接的鎖開銷(不考慮Erlang虛擬機底層實現中的鎖應用)。

AMQP(Advanced Message Queue Protocol)定義了一種消息系統規範。這個規範描述了在一個分佈式的系統中各個子系統如何經過消息交互。

7、Log4j

日誌記錄的優先級,分爲OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定義的級別。

8、Ehcache

EhCache 是一個純Java的進程內緩存框架,具備快速、精幹等特色,是Hibernate中默認的CacheProvider。Ehcache是一種普遍使用的開源Java分佈式緩存。主要面向通用緩存,Java EE和輕量級容器。它具備內存和磁盤存儲,緩存加載器,緩存擴展,緩存異常處理程序,一個gzip緩存servlet過濾器,支持REST和SOAP api等特色。

優勢: 

一、 快速 

二、 簡單 

三、 多種緩存策略 

四、緩存數據有兩級:內存和磁盤,所以無需擔憂容量問題 

五、 緩存數據會在虛擬機重啓的過程當中寫入磁盤 

六、能夠經過RMI、可插入API等方式進行分佈式緩存 

七、 具備緩存和緩存管理器的偵聽接口 

八、支持多緩存管理器實例,以及一個實例的多個緩存區域 

九、提供Hibernate的緩存實現

缺點: 

一、使用磁盤Cache的時候很是佔用磁盤空間:這是由於DiskCache的算法簡單,該算法簡單也致使Cache的效率很是高。它只是對元素直接追加存儲。所以搜索元素的時候很是的快。若是使用DiskCache的,在很頻繁的應用中,很快磁盤會滿。

二、不能保證數據的安全:當忽然kill掉java的時候,可能會產生衝突,EhCache的解決方法是若是文件衝突了,則重建cache。這對於Cache數據須要保存的時候可能不利。固然,Cache只是簡單的加速,而不能保證數據的安全。若是想保證數據的存儲安全,可使用Bekeley DB Java Edition版本。這是個嵌入式數據庫。能夠確保存儲安全和空間的利用率。

9、Redis

redis是一個key-value存儲系統。和Memcached相似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set –有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操做,並且這些操做都是原子性的。在此基礎上,redis支持各類不一樣方式的排序。與memcached同樣,爲了保證效率,數據都是緩存在內存中。區別的是redis會週期性的把更新的數據寫入磁盤或者把修改操做寫入追加的記錄文件,而且在此基礎上實現了master-slave(主從)同步。

Redis數據庫徹底在內存中,使用磁盤僅用於持久性。相比許多鍵值數據存儲,Redis擁有一套較爲豐富的數據類型。Redis能夠將數據複製到任意數量的從服務器。

1.二、Redis優勢:

(1)異常快速:Redis的速度很是快,每秒能執行約11萬集合,每秒約81000+條記錄。

(2)支持豐富的數據類型:Redis支持最大多數開發人員已經知道像列表,集合,有序集合,散列數據類型。這使得它很是容易解決各類各樣的問題,由於咱們知道哪些問題是能夠處理經過它的數據類型更好。

(3)操做都是原子性:全部Redis操做是原子的,這保證了若是兩個客戶端同時訪問的Redis服務器將得到更新後的值。

(4)多功能實用工具:Redis是一個多實用的工具,能夠在多個用例如緩存,消息,隊列使用(Redis原生支持發佈/訂閱),任何短暫的數據,應用程序,如Web應用程序會話,網頁命中計數等。

1.三、Redis缺點: 

(1)單線程 

(2)耗內存

10、Shiro

Apache Shiro是Java的一個安全框架,旨在簡化身份驗證和受權。Shiro在JavaSE和JavaEE項目中均可以使用。它主要用來處理身份認證,受權,企業會話管理和加密等。Shiro的具體功能點以下:

(1)身份認證/登陸,驗證用戶是否是擁有相應的身份;

(2)受權,即權限驗證,驗證某個已認證的用戶是否擁有某個權限;即判斷用戶是否能作事情,常見的如:驗證某個用戶是否擁有某個角色。或者細粒度的驗證某個用戶對某個資源是否具備某個權限;

(3)會話管理,即用戶登陸後就是一次會話,在沒有退出以前,它的全部信息都在會話中;會話能夠是普通JavaSE環境的,也能夠是如Web環境的;

(4)加密,保護數據的安全性,如密碼加密存儲到數據庫,而不是明文存儲;

(5)Web支持,能夠很是容易的集成到Web環境; 
Caching:緩存,好比用戶登陸後,其用戶信息、擁有的角色/權限沒必要每次去查,這樣能夠提升效率;

(6)shiro支持多線程應用的併發驗證,即如在一個線程中開啓另外一個線程,能把權限自動傳播過去;

(7)提供測試支持;

(8)容許一個用戶僞裝爲另外一個用戶(若是他們容許)的身份進行訪問;

(9)記住我,這個是很是常見的功能,即一次登陸後,下次再來的話不用登陸了。

文字描述可能並不能讓猿友們徹底理解具體功能的意思。下面咱們以登陸驗證爲例,向猿友們介紹Shiro的使用。至於其餘功能點,猿友們用到的時候再去深究其用法也不遲。

11、設計模式

這個算不上框架,可自行忽略,不過博主認爲設計模式的思想頗有必要了解一下。

思想:

開閉原則

開閉原則就是說對擴展開放,對修改關閉。在程序須要進行拓展的時候,不能去修改原有的代碼。

針對接口編程,針對接口編程,依賴於抽象而不依賴於具體。

儘可能使用合成/聚合的方式,而不是使用繼承。

一個實體應當儘可能少的與其餘實體之間發生相互做用,使得系統功能模塊相對獨立。

使用多個隔離的接口,比使用單個接口要好。

里氏代換原則

(1)子類的能力必須大於等於父類,即父類可使用的方法,子類均可以使用。

(2)返回值也是一樣的道理。假設一個父類方法返回一個List,子類返回一個ArrayList,這固然能夠。若是父類方法返回一個ArrayList,子類返回一個List,就說不通了。這裏子類返回值的能力是比父類小的。

(3)還有拋出異常的狀況。任何子類方法能夠聲明拋出父類方法聲明異常的子類。 而不能聲明拋出父類沒有聲明的異常。

相關文章
相關標籤/搜索