SSH

一、對Spring的理解。

  1. Spring實現了工廠模式的工廠類,這個類名爲BeanFactory(實際上是一個接口),在程序中通常使用BeanFactory的子類ApplicationContext。Spring相當於一個大的工廠類,在其配置文件中通過元素配置用於創建實例對象的類名和實例對象的屬性。

  2. Spring提供了對IOC的良好支持,IOC是一種編程思想,是一種架構藝術,利用這種思想可以很好地實現模塊之間的解耦。IOC也稱爲DI(Dependency Injection,依賴注入),什麼叫依賴注入呢?​

    首先想說說IOC(Inversion of Control,控制倒轉)。這是spring的核心,貫穿始終。所謂IOC,對於spring框架來說,就是由spring來負責控制對象的生命週期和對象間的關係。傳統的程序開發,在一個對象中,如果要使用另外的對象,就必須自己new一個,或者從JNDI中查詢一個,使用完之後還要將對象銷燬(比如Connection等),對象始終會和其他的接口或類藕合起來。

    所有的類的創建、銷燬都由 spring來控制,也就是說控制對象生存週期的不再是引用它的對象,而是spring。對於某個具體的對象而言,以前是它控制其他對象,現在是所有對象都被spring控制,所以這叫控制反轉。IOC的一個重點是在系統運行中,動態地向某個對象提供它所需要的其他對象。這一點是通過DI來實現的。比如對象A需要操作數據庫,以前我們總是要在A中自己編寫代碼來獲得一個Connection對象,有了 spring我們就只需要告訴spring,A中需要一個Connection,至於這個Connection怎麼構造,何時構造,A不需要知道。在系統運行時,spring會在適當的時候製造一個Connection,然後像打針一樣,注射到A當中,這樣就完成了對各個對象之間關係的控制。A需要依賴 Connection才能正常運行,而這個Connection是由spring注入到A中的,依賴注入的名字就這麼來的。那麼DI是如何實現的呢? Java 1.3之後一個重要特徵是反射(reflection),它允許程序在運行的時候動態地生成對象、執行對象的方法、改變對象的屬性,spring就是通過反射來實現注入的。​

  3. Spring提供了對AOP技術的良好封裝,AOP稱爲面向切面編程,就是系統中有很多各不相干的類的方法,在這些衆多方法中要加入某種系統功能的代碼,例如,加入日誌,加入權限判斷,加入異常處理,這種應用稱爲AOP。實現AOP功能採用的是代理技術,客戶端程序不再調用目標,而調用代理類,代理類與目標類對外具有相同的方法聲明,有兩種方式可以實現相同的方法聲明,一是實現相同的接口,二是作爲目標的子類,在JDK中採用Proxy類產生動態代理的方式爲某個接口生成實現類,如果要爲某個類生成子類,則可以用CGLIB。在生成的代理類的方法中加入系統功能和調用目標類的相應方法,系統功能的代理以Advice對象進行提供,顯然要創建出代理對象,至少需要目標類和Advice類。spring提供了這種支持,只需要在spring配置文件中配置這兩個元素即可實現代理和aop功能。​

    AOP配置:

<bean id="proxy" type="org.spring.framework.aop.ProxyBeanFactory">
   <property name="target" ref=""></property>
   <property name="advisor" ref=""></property>
</bean>

二、對Struts的理解。

  1. struts是一個按MVC模式設計的Web層框架,其實它就是一個大大的servlet,這個Servlet名爲ActionServlet,或是ActionServlet的子類。我們可以在web.xml文件中將符合某種特徵的所有請求交給這個Servlet處理,這個Servlet再參照一個配置文件(通常爲/WEB-INF/struts-config.xml)將各個請求分別分配給不同的action去處理。(struts的配置文件可以有多個,可以按模塊配置各自的配置文件,這樣可以防止配置文件的過度膨脹。)

  2. ActionServlet把請求交給action去處理之前,會將請求參數封裝成一個formbean對象(就是一個java類,這個類中的每個屬性對應一個請求參數),封裝成一個什麼樣的formbean對象呢?看配置文件。

  3. 要說明的是, ActionServlet把formbean對象傳遞給action的execute方法之前,可能會調用formbean的validate方法進行校驗,只有校驗通過後纔將這個formbean對象傳遞給action的execute方法,否則,它將返回一個錯誤頁面。

  4. action執行完後要返回顯示的結果視圖,這個結果視圖是用一個ActionForward對象來表示的,actionforward對象通過struts-config.xml配置文件中的配置關聯到某個jsp頁面,因爲程序中使用的是在struts-config.xml配置文件中爲jsp頁面設置的邏輯名,這樣可以實現action程序代碼與返回的jsp頁面名稱的解耦。​

三、對Hibernate的理解。

  1. 面向對象設計的軟件內部運行過程可以理解成就是在不斷創建各種新對象、建立對象之間的關係,調用對象的方法來改變各個對象的狀態和對象消亡的過程,不管程序運行的過程和操作怎麼樣,本質上都是要得到一個結果,程序上一個時刻和下一個時刻的運行結果的差異就表現在內存中的對象狀態發生了變化。

  2. 爲了在關機和內存空間不夠的狀況下,保持程序的運行狀態,需要將內存中的對象狀態保存到持久化設備和從持久化設備中恢復出對象的狀態,通常都是保存到關係數據庫來保存大量對象信息。從Java程序的運行功能上來講,保存對象狀態的功能相比系統運行的其他功能來說,應該是一個很不起眼的附屬功能,java採用jdbc來實現這個功能,這個不起眼的功能卻要編寫大量的代碼,而做的事情僅僅是保存對象和恢復對象,並且那些大量的jdbc代碼並沒有什麼技術含量,基本上是採用一套例行公事的標準代碼模板來編寫,是一種苦活和重複性的工作。

  3. 通過數據庫保存java程序運行時產生的對象和恢復對象,其實就是實現了java對象與關係數據庫記錄的映射關係,稱爲ORM(即Object Relation Mapping),人們可以通過封裝JDBC代碼來實現了這種功能,封裝出來的產品稱之爲ORM框架,Hibernate就是其中的一種流行ORM框架。使用Hibernate框架,不用寫JDBC代碼,僅僅是調用一個save方法,就可以將對象保存到關係數據庫中,僅僅是調用一個get方法,就可以從數據庫中加載出一個對象。

  4. 使用Hibernate的基本流程是:配置Configuration對象、產生SessionFactory、創建session對象,啓動事務,完成CRUD操作,提交事務,關閉session。

  5. 使用Hibernate時,先要配置hibernate.cfg.xml文件,其中配置數據庫連接信息和方言等,還要爲每個實體配置相應的hbm.xml文件,hibernate.cfg.xml文件中需要登記每個hbm.xml文件。

四、struts1與struts2的區別。

  1. 都是MVC的WEB框架。

  2. struts1是老牌框架,應用很廣泛,有很好的羣衆基礎,使用它開發風險很小,成本更低!struts2雖然基於這個框架,但是應用羣衆並不多,相對不成熟,未知的風險和變化很多,開發人員相對不好招,使用它開發項目的風險係數更大,用人成本更高!

  3. struts2畢竟是站在前輩的基礎設計出來,它會改善和完善struts1中的一些缺陷,struts1中一些懸而未決問題在struts2得到了解決。

  4. struts1的前端控制器是一個Servlet,名稱爲ActionServlet,struts2的前端控制器是一個filter,在struts2.0中叫FilterDispatcher,在struts2.1中叫 StrutsPrepareAndExecuteFilter。

  5. struts1的action需要繼承Action類,struts2的action可以不繼承任何類;struts1對同一個路徑的所有請求共享一個Action實例,struts2對同一個路徑的每個請求分別使用一個獨立Action實例對象,所有對於struts2的Action不用考慮線程安全問題。

  6. 在struts1中使用formbean封裝請求參數,在struts2中直接使用action的屬性來封裝請求參數。

  7. struts1中的多個業務方法放在一個Action中時(即繼承DispatchAction時),要麼都校驗,要麼都不校驗;對於struts2,可以指定只對某個方法進行校驗,當一個Action繼承了ActionSupport且在這個類中只編寫了validateXxx()方法,那麼則只對Xxx()方法進行校驗。

    一個請求來了的執行流程進行分析,struts2是自動支持分模塊開發,並可以不同模塊設置不同的url前綴,這是通過package的namespace來實現的;struts2是支持多種類型的視圖;struts2的視圖地址可以是動態的,即視圖的名稱是支持變量方式的。視圖內容顯示方面:它的標籤用ognl,比el強大很多,在國際化方面支持分模塊管理,兩個模塊用到同樣的key,對應不同的消息。

    struts1配置文件中的redirect視圖的url不能接受參數,而struts2配置文件中的redirect視圖可以接受參數。

發佈了21 篇原創文章 · 獲贊 4 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章