javaEE常用開源框架的認識及概述


對javaEE框架的認識

                                                                                       一、什么是框架

    通俗的理解,框架是我們軟件開發中的一套解決方案,不同的框架解決的問題是不同的,比如MyBatis框架解決的是持久層的問題,springMVC框架解決的是表現層的問題。

需要注意的是,框架它本身自己是不能實現業務上的功能,它只能對,比如說持久層、表現層、結構合理性等等,提供一些解決方案,而真正的業務層部分,還需要程序員自己來提供。所以說,框架可以理解為一個半成品,我們選用這個半成品,然后加上業務需求(即項目中的需求)來最終實現整個的功能。

而我們使用框架的目的其實也很簡單,就是為了提高開發的效率,而不用關心一些繁瑣的、復雜的底層代碼實現,從而把更多的精力用在需求的實現上。

                                                                                      二、框架能幫我們解決哪些問題

要明白框架能解決哪些問題,首先要知道三層架構。

    三層架構分為三層:

       表現層:是用於展示數據的;

       業務層:是處理業務需求的;

       持久層:是和數據庫交互的。

    從這張圖可看出上面列出的三個框架和三層架構所處的位置。可以看出MyBatis框架是一個持久層框架,它是和數據庫交互的;而下面的Spring框架有點特殊,它不屬於任何一層;SpringMVC框架是處於表現層的,它是一個表現層框架。

    從這張圖可大致得出,不同的框架是各司其職的,它們解決某一層或者某一類的事情。

 

 

三、對一些主流框架的認識

    由於以下具體的框架都沒有學過,所以只能說一說,我對這些框架的大體認識,可能對於某些框架沒用使用過和對比過很難對它的優勢有深刻的認識,只能在后續的學習中,深入理解。

1、Struts2框架

    Struts2框架處於三層架構的表現層,可以用來替代掉Servlet技術,來處理前端訪問服務器的請求(如表單、頁面提交過來的請求),所以Struts2是屬於一個前端處理的框架。

     下圖顯示了Struts2框架在三層架構中的位置:

    對於web日常的工作,比如獲取請求參數、轉發、重定向、校驗參數等等,使用Servlet技術基本都可以完成。既然使用Servlet技術基本都可以完成我們的需求,為什么還要使用Struts2這個框架呢?原因在於Struts2有其自身的優勢,相比使用Servlet,Struts2用起來更加方便,很多事情它自動就幫我們做了,而且Struts2還具有更加先進的架構和思想。

    對於Struts2框架的歷史也非常有意思,大部分框架不同版本之間性質上不會有什么改變,基本是不斷修改bug和完善功能,而Struts2和它之前的版本Struts1之間的最大區別就是技術上沒什么關系,這就要從Struts的歷史說起。   

    在早年Struts2還沒出來的時候,Struts1特別火,用得很廣,但這時候Struts1的作者非常苦惱,因為Struts1當時雖然很好用,但是它基於的架構和所有的功能構建都是在Servlet之上(這里指的不是Servlet技術,而是具體的Servlet類),而Servlet是線程不安全的,所以導致整個Struts1框架也是處於一種線程不安全狀態,使得很多的功能無法落實,所以Struts1的作者就很苦惱這個問題,他一直在研發新的架構。與此同時,另外有一個團隊也非常苦惱,這個團隊(也就是WebWork團隊)也開發了一款前端處理框架,但是他們是后來人,他們看到了Struts的缺陷,於是他們開發出來的框架同樣也是基於Servlet技術,但它們基於的是Filter(過濾器),這樣設計出來的框架會靈活很多,而且從架構上來說徹底擺脫了線程安全問題。可是當時滿大街用的都是Struts1框架,WebWork團隊辛辛苦苦開發出的框架根本沒人用,推廣不出去。於是,WebWork就想了一個辦法,找到了Struts1的作者想要一起合作,Struts的作者看到這個新的框架后,兩者一拍即合,於是有了Struts2框架。所以Struts2的前身就是WebWork,而Struts1和Struts2兩者基本是兩個不同的框架,當然后來Struts1的作者也把自己之前想要在Struts1中實現的想法帶入到了Struts2中來,所以現在的Struts2框架是一個強強聯手的框架,整合了Struts1和WebWork的優點。 

2、SpringMVC

    要了解SpringMVC,首先來看看MVC模型,對於表現層的框架一般都會采用MVC這種設計模型去做架構,MVC即:

        M  model 模型:實際上就是java中JavaBean的一個對象,用來封裝數據;

        V  View 視圖:其中指的是jsp技術或者HTML這種技術,用來顯示;

        C  Controller 控制器:指的是像Servlet這種技術,能用來接收請求。

    MVC這種設計模型的意思就是,發請求,請求先到達控制器(Controller),控制器接收請求,請求接收到之后,再用一個JavaBean(model)把拿到的數據封裝起來,根據這個JavaBean中封裝的數據就可以調用業務層進行業務處理,業務層如果再訪問持久層的數據,也可以再把數據封裝到JavaBean當中,最終可以把程序轉發到jsp(view),jsp顯示結果生成HTML響應給用戶,這就是整個一個MVC模型,分工非常明確。

    SpringMVC框架也是一個處於表現層的框架,是采用MVC模型來設計的,所以它能夠接受請求,拿到請求參數,並進行數據的封裝,還可以轉發到jsp顯示對應的數據。同時,它也是一個輕量級的web框架,它屬於Spring FrameWork的一個后續產品,已經融合在Spring Web Flow中。做web開發可以選擇SpringMVC這個框架,也可以選擇別的框架(比如Struts2),因為最終Spring都可以幫你集成。但使用SpringMVC更有好處,因為SpringMVC屬於Spring的一部分,SpringMVC和Spring的整合相比別的框架更加容易。

    SpringMVC目前已經成為最主流的框架之一,並且隨着Spring3.0的發布,已經全面超越Struts2,成為最優秀的MVC框架。

    它通過一套注解,讓一個簡單的Java類成為處理請求的控制器,而無須實現任何接口,而如果我們使用Servlet,必須繼承HttpServlet或者實現Servlet接口。同時它還支持RESTful編程風格的請求。

 

3、Hibernate框架和Mybatis

Hibernate框架是一個全自動的、完全面向對象的持久層框架,代替了以往的DButils幫助我們完成數據庫操作。

下圖顯示了Struts2框架在三層架構中的位置:

    使用Hibernate框架的好處:能夠使我們操作數據庫時,可以用面向對象的方式來完成,而不需要寫SQL語句。

    Hibernate是一款orm框架,orm(Object Relational Mapping,)即對象關系映射,在hibernate中體現為使用一個配置文件來配置表,即對象與數據中表之間的映射關系,其中對象名對應一個表名,對象屬性對應表中的某一列。

    相對於Hibernate,Mybatis框架是一個半自動化的持久層框架,同樣也是用於完成數據庫操作。相比hibernate框架,兩者有相同點也有不同點,hibernate框架sql語句已經被封裝,直接可以使用,而mybatis 屬於半自動化,sql需要手工完成,稍微繁瑣,但可以避免不需要的查詢,提高系統性能。同時Mybatis通過手動寫SQL語句,也更容易維護。

在開發工程中,Hibernate框架無需過多關注底層實現,只要去管理對象即可,而Mybatis需要自行管理映射關系。

     總結起來,Mybatis相比於Hibernate,更加的小巧、簡單,某些操作需要我們自己完成。

 

3、Spring框架

    Spring是分層的Java SE/EE應用full-stack(全棧式)輕量級開源框架,以IOC(Inverse Of Control 反轉控制)和AOP(Aspect Oriented Programming 面向切面編程)為內核,提供了表現層MVC和持久層Spring JDBC以及業務層事務管理等眾多的企業級應用技術,還能整合眾多著名的開源第三方框架和類庫,逐漸成為使用最多的JavaEE企業應用開源框架。

 

 

 

 

    從這張圖可看出,Spring不屬於任何一層,它橫跨了三層架構,它是一個以IOC和AOP為核心的容器框架,能管理應用對象的生命周期。我們之前創建對象一般都要通過new + 構造方法,而且每new一次就要開辟一塊內存空間,這樣如果項目中使用了1000個對象,就需要開辟1000塊內存空間,而在某段時間中我們可能並不同時需要這1000個對象,這樣就造成了資源的浪費,如果使用Spring這個容器,它就會自動幫我們管理這些對象的生命周期,就像tomacat容器幫我們管理Servlet的生命周期一樣。

    對AOP的簡單理解:之前我們一直學的是OOP(面向對象編程),因為OOP存在某些缺陷,所以有了AOP(面向切面編程)去對OOP進行補充,所以AOP和OOP之間的關系不是包含關系,而是AOP是對OOP的補充。

    Spring優點還在於組件化,Spring中的組件指的就是Spring所管理的對象。一個項目對我們來說,可以理解為由各個類產生對象,由對象調用方法,最終實現功能。而Spring可以把項目中用到的類進行管理,把這些對象稱為組件,項目的實現由各個對象相互調用方法就可以變成組件之間的相互調用,這樣項目就被組件化了。組件化的好處在於,組件與組件之間是沒有關系的,這樣就降低了程序之間的耦合。

    Spring各個模塊結構:

 

4、SpringBoot框架

     SpringBoot框架是基於Spring框架的,所以SpringBoot本質還是Spring框架,它的出現是替代Spring中的缺點的,SpringBoot是對Spring的進一步封裝,所以Spring能做的SpringBoot都能做,而且SpringBoot更加好用。

     對Spring存在的缺點的簡單理解:首先使用Spring框架,需要進行的配置是十分繁瑣的,而且有些配置不論誰使用都是一樣的,所以沒有必要每次都配置;其次,項目的依賴管理也是一件耗時耗力的事情,在環境搭建時,需要分析導入庫以及相關聯庫的坐標,一旦選錯了依賴的版本,可能就會帶來不兼容的問題。

    而SpringBoot對上述的Spring存在的問題都提出了解決方案。它基於約定優於配置的思想,對於某些固定的配置自動就幫你配好了,讓開發人員把更多的精力放在業務邏輯的處理上;而SpringBoot用起步依賴的方式,把具備某些功能的坐標打包到一起,方便導入,並提供了一些默認的功能。

    綜上,SpringBoot框架可以理解為對Spring的一種完善,它不是對Spring功能上的增強,而是提供了一種快速使用Spring的方式。

 

                                                                                       四、總結

    對於java web開發框架,開始是SSH(Struts、Spring、Hibernate)較為流行,后來升級為Struts2,到后來Struts2漸漸被SpringMVC替換掉,變成了Spring + SpringMVC + Hibernate/ibatis架構。

    之后Hibernate配置維護需要的人力成本大而慢慢被ibatis代替,后來MyBatis出現了,從iBatis到MyBatis,MyBatis提供了更為強大的功能,同時並沒有損失其易用性,就變成為了Spring+SpringMVC+Mybatis,這是很多公司比較流行的框架。    

    目前,隨着SpringBoot的流行,開始向SpringBoot+Mybatis架構轉變,同時基於SpringBoot的SpringCloud微服務框架開始成為前沿框架。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM