java經常使用的框架介紹

1、SpringMVChtml

http://blog.csdn.net/evankaka/article/details/45501811前端

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處理請求的流程spring

這裏寫圖片描述

具體執行步驟以下:數據庫

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

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

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

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

2、Spring

http://blog.csdn.net/cainiaowys/article/details/7107925

2.一、IOC容器:http://www.cnblogs.com/linjiqin/archive/2013/11/04/3407126.html

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

2.二、AOP:http://blog.csdn.net/moreevan/article/details/11977115

簡單地說,就是將那些與業務無關,卻爲業務模塊所共同調用的邏輯或責任封裝起來,便於減小系統的重複代碼,下降模塊間的耦合度,並有利於將來的可操做性和可維護性。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

http://blog.csdn.net/u013142781/article/details/50388204

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

http://blog.csdn.net/u013142781/article/details/50387583

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

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

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

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

節點角色說明: 
Provider: 暴露服務的服務提供方。 
Consumer: 調用遠程服務的服務消費方。 
Registry: 服務註冊與發現的註冊中心。 
Monitor: 統計服務的調用次調和調用時間的監控中心。 
Container: 服務運行容器。

5、Maven

http://blog.csdn.net/u013142781/article/details/50316383

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

6、RabbitMQ

http://blog.csdn.net/u013142781/article/category/6061896

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

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

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

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

7、Log4j

http://blog.csdn.net/u013142781/article/category/6045728

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

8、Ehcache

http://blog.csdn.net/u013142781/article/category/6066337

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

http://blog.csdn.net/u013142781/article/category/6067864

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

http://blog.csdn.net/u013142781/article/details/50629708

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

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

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

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

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

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

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

(7)提供測試支持;

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

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

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

11、設計模式

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

http://blog.csdn.net/u013142781/article/details/50816245 
http://blog.csdn.net/u013142781/article/details/50821155 
http://blog.csdn.net/u013142781/article/details/50825301

思想:

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

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

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

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

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

里氏代換原則:(1)子類的能力必須大於等於父類,即父類可使用的方法,子類均可以使用。(2)返回值也是一樣的道理。假設一個父類方法返回一個List,子類返回一個ArrayList,這固然能夠。若是父類方法返回一個ArrayList,子類返回一個List,就說不通了。這裏子類返回值的能力是比父類小的。(3)還有拋出異常的狀況。任何子類方法能夠聲明拋出父類方法聲明異常的子類。 
而不能聲明拋出父類沒有聲明的異常。

12.Spring boot

什麼是Spring Boot

Spring Boot 是由 Pivotal 團隊提供的全新框架,其設計目的是用來簡化新 Spring 應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員再也不須要定義樣板化的配置。用個人話來理解,就是 Spring Boot 其實不是什麼新的框架,它默認配置了不少框架的使用方式,就像 Maven 整合了全部的 Jar 包,Spring Boot 整合了全部的框架。

 

使用 Spring Boot有什麼好處

其實就是簡單、快速、方便!平時若是咱們須要搭建一個 Spring Web 項目的時候須要怎麼作呢?

  • 1)配置 web.xml,加載 Spring 和 Spring mvc
  • 2)配置數據庫鏈接、配置 Spring 事務
  • 3)配置加載配置文件的讀取,開啓註解
  • 4)配置日誌文件
  • ...
  • 配置完成以後部署 Tomcat 調試
  • ...

如今很是流行微服務,若是我這個項目僅僅只是須要發送一個郵件,若是個人項目僅僅是生產一個積分;我都須要這樣折騰一遍!

可是若是使用 Spring Boot 呢?
很簡單,我僅僅只須要很是少的幾個配置就能夠迅速方便的搭建起來一套 Web 項目或者是構建一個微服務!

使用 Spring Boot 到底有多爽,:https://spring.io/projects/spring-boot/

13.Nginx

Nginx

沒有聽過Nginx?那麼必定聽過它的"同行"Apache吧!Nginx同Apache同樣都是一種WEB服務器。基於REST架構風格,以統一資源描述符(Uniform Resources Identifier)URI或者統一資源定位符(Uniform Resources Locator)URL做爲溝通依據,經過HTTP協議提供各類網絡服務。

然而,這些服務器在設計之初受到當時環境的侷限,例如當時的用戶規模,網絡帶寬,產品特色等侷限而且各自的定位和發展都不盡相同。這也使得各個WEB服務器有着各自鮮明的特色。

Apache的發展時期很長,並且是毫無爭議的世界第一大服務器。它有着不少優勢:穩定、開源、跨平臺等等。它出現的時間太長了,它興起的年代,互聯網產業遠遠比不上如今。因此它被設計爲一個重量級的。它不支持高併發的服務器。在Apache上運行數以萬計的併發訪問,會致使服務器消耗大量內存。操做系統對其進行進程或線程間的切換也消耗了大量的CPU資源,致使HTTP請求的平均響應速度下降。

這些都決定了Apache不可能成爲高性能WEB服務器,輕量級高併發服務器Nginx就應運而生了。

俄羅斯的工程師Igor Sysoev,他在爲Rambler Media工做期間,使用C語言開發了Nginx。Nginx做爲WEB服務器一直爲Rambler Media提供出色而又穩定的服務。

而後呢,Igor Sysoev將Nginx代碼開源,而且賦予自由軟件許可證。

因爲:

  • Nginx使用基於事件驅動架構,使得其能夠支持數以百萬級別的TCP鏈接
  • 高度的模塊化和自由軟件許可證是的第三方模塊層出不窮(這是個開源的時代啊~)
  • Nginx是一個跨平臺服務器,能夠運行在Linux,Windows,FreeBSD,Solaris, AIX,Mac OS等操做系統上
  • 這些優秀的設計帶來的極大的穩定性

14.Hibernate

什麼是Hibernate

咱們能夠從度娘上摘抄這樣有關Hibernate的介紹:

Hibernate是一個開放源代碼的對象關係映射框架,它對JDBC進行了很是輕量級的對象封裝,它將POJO與數據庫表創建映射關係,是一個全自動的orm框架,hibernate能夠自動生成SQL語句,自動執行,使得Java程序員能夠爲所欲爲的使用對象編程思惟來操縱數據庫。Hibernate能夠應用在任何使用JDBC的場合,既能夠在Java的客戶端程序使用,也能夠在Servlet/JSP的Web應用中使用。

從中,咱們能夠得出這樣的結論:Hibernate是一個輕量級的JDBC封裝,也就是說,咱們可使用Hibernate來完成原來咱們使用JDBC完成的操做,也就是與數據庫的交互操做。它是在dao層去使用的。

15.ActiveMQ  

MQ是消息中間件,是一種在分佈式系統中應用程序藉以傳遞消息的媒介,經常使用的有ActiveMQ,RabbitMQ,kafka。ActiveMQ是Apache下的開源項目,徹底支持JMS1.1和J2EE1.4規範的JMS Provider實現。 
特色: 
一、支持多種語言編寫客戶端 
二、對spring的支持,很容易和spring整合 
三、支持多種傳輸協議:TCP,SSL,NIO,UDP等 
四、支持AJAX 
消息形式: 
一、點對點(queue) 
二、一對多(topic) 

16.Elasticsearch 

介紹

Elasticsearch 是一個分佈式可擴展的實時搜索和分析引擎,一個創建在全文搜索引擎 Apache Lucene(TM) 基礎上的搜索引擎.固然 Elasticsearch 並不只僅是 Lucene 那麼簡單,它不只包括了全文搜索功能,還能夠進行如下工做:

  • 分佈式實時文件存儲,並將每個字段都編入索引,使其能夠被搜索。
  • 實時分析的分佈式搜索引擎。
  • 能夠擴展到上百臺服務器,處理PB級別的結構化或非結構化數據。

17.HDFS

 介紹

在現代的企業環境中,單機容量每每沒法存儲大量數據,須要跨機器存儲。統一管理分佈在集羣上的文件系統稱爲分佈式文件系統。而一旦在系統中,引入網絡,就不可避免地引入了全部網絡編程的複雜性,例如挑戰之一是若是保證在節點不可用的時候數據不丟失。

傳統的網絡文件系統(NFS)雖然也稱爲分佈式文件系統,可是其存在一些限制。因爲NFS中,文件是存儲在單機上,所以沒法提供可靠性保證,當不少客戶端同時訪問NFS Server時,很容易形成服務器壓力,形成性能瓶頸。另外若是要對NFS中的文件進行操做,須要首先同步到本地,這些修改在同步到服務端以前,其餘客戶端是不可見的。某種程度上,NFS不是一種典型的分佈式系統,雖然它的文件的確放在遠端(單一)的服務器上面。

18.ZooKeeper

概述

Zookeeper是Hadoop的一個子項目,它是分佈式系統中的協調系統,可提供的服務主要有:配置服務、名字服務、分佈式同步、組服務等。

它有以下的一些特色:

  • 簡單

Zookeeper的核心是一個精簡的文件系統,它支持一些簡單的操做和一些抽象操做,例如,排序和通知。

  • 豐富

         Zookeeper的原語操做是很豐富的,可實現一些協調數據結構和協議。例如,分佈式隊列、分佈式鎖和一組同級別節點中的「領導者選舉」。

  • 高可靠

Zookeeper支持集羣模式,能夠很容易的解決單點故障問題。

  • 鬆耦合交互

不一樣進程間的交互不須要了解彼此,甚至能夠沒必要同時存在,某進程在zookeeper中留下消息後,該進程結束後其它進程還能夠讀這條消息。

  • 資源庫

         Zookeeper實現了一個關於通用協調模式的開源共享存儲庫,能使開發者免於編寫這類通用協議。

19.Swagger

關於 Swagger

Swagger能成爲最受歡迎的REST APIs文檔生成工具之一,有如下幾個緣由:

  • Swagger 能夠生成一個具備互動性的API控制檯,開發者能夠用來快速學習和嘗試API。
  • Swagger 能夠生成客戶端SDK代碼用於各類不一樣的平臺上的實現。
  • Swagger 文件能夠在許多不一樣的平臺上從代碼註釋中自動生成。
  • Swagger 有一個強大的社區,裏面有許多強悍的貢獻者。

Swagger 文檔提供了一個方法,使咱們能夠用指定的 JSON 或者 YAML 摘要來描述你的 API,包括了好比 names、order 等 API 信息。

你能夠經過一個文本編輯器來編輯 Swagger 文件,或者你也能夠從你的代碼註釋中自動生成。各類工具均可以使用 Swagger 文件來生成互動的 API 文檔。

相關文章
相關標籤/搜索