簡單談談自己對SSH框架的理解

J2EE開發框架其實也是jar類庫,大部分是對原生方法的封裝。目的是爲了簡化開發人員的工作,規範開發過程。學習框架即學習其核心原理和配置。

但java世界的框架五花八門,但萬變不離其宗,只有真正掌握了SSH框架的核心機制和設計理念才能輕鬆的學好其他框架。

下面談談我對SSH框架的簡單理解,以備今後面試找工作之用。

一、Hibernate

Hibernate框架是一個ORM框架,是對JDBC的封裝。目的就是爲了簡化對數據表訪問的操作。

ORM是對象關係映射,通過讓pojo類與數據表建立映射,即可通過持久層操作來代替SQL語句訪問數據庫。

那麼Hibernate框架的核心原理就是ORM,通過Java反射機制實現。

配置文件包括:

1)Hibernate.cfg.xml   存儲連接數據庫的信息。

2)tablename.hbm.xml  配置pojo類和數據表的關聯關係


jdbc操作數據庫的代碼如下

public static Connection getConnection() {
  try {
   Class.forName("com.mysql.jdbc.Driver");
   Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
   return conn;
  } catch (Exception e) {
   e.printStackTrace();
   return null;
  }
 }
public static void main(String[] args){
   Connection con=getConnection();
   Statement st=con.createStatement();
   String sql="select * from user";
   ResultSet re=st.executeQuery(sql);
}

JDBC時代,我們用Dao對數據表操作進行封裝,往往每個數據表都要對應一個Dao類,並且需要寫sql語句,這樣就造成了代碼冗餘。


而如今hibernate使得我們不需要再創建多個Dao類。只需一個Dao,往裏面傳入相應的pojo類,通過反射機制獲取該pojo類的屬性字段拼湊成一條sql語句,我們要做的只往裏面傳入參數即可,不用寫sql語句,所以說不會寫sql語句的人也可以使用hibernate對數據庫進行讀寫操作。


核心類
Session接口:負責持久化對象的CRUD操作
SessionFactory接口:負責初始化Hibernate
Configuration接口:負責配置並啓動Hibernate
Transaction接口:負責事務
Query接口和Criteria接口:負責執行各種數據庫查詢


持久層對象的3個狀態
(1)自由狀態(瞬時態):不曾持久化,未與任何Session相關聯
瞬時對象在內存孤立存在,它是攜帶信息的載體,不和數據庫的數據有任何關聯關係
session的save()或saveOrUpdate()方法將瞬時對象與數據庫相關聯,並將數據對應的插入數據庫中,此時該瞬時對象轉變成持久化對象。 
(2)持久化對象:僅與一個Session相關聯
1. 和session實例關聯; 
2. 在數據庫中有與之關聯的記錄
hibernate的delete()方法,對應的持久對象就變成瞬時對象,因數據庫中的對應數據已被刪除,該對象不再與數據庫的記錄關聯。 
當一個session執行close()或clear()、evict()之後,持久對象變成託管對象,此時持久對象會變成託管對象,此時該對象雖然具有數據庫識別值,但它已不在HIbernate持久層的管理之下。
(3)遊離狀態(託管態):已經進行過持久化,但當前未與任何Session相關聯
託管對象擁有數據庫的識別值,可通過update()、saveOrUpdate()等方法,轉變成持久對象。 
1. 本質上與瞬時對象相同,在沒有任何變量引用它時,JVM會在適當的時候將它回收; 
2. 比瞬時對象多了一個數據庫記錄標識值




二、struts2
struts2是一個MVC框架,其核心控制器filterDispatch充當了一個控制器(conroller)的角色。
相對於struts1來說,struts2的框架結構變化非常之大。struts1是對原生servlet的封裝,而struts2是對webwork的改進和封裝。
其核心機制是攔截器原理,也是基於Java反射機制的實現。通過URL解析出的action名和方法名,檢索並執行出相應的action類以及攔截器類。
核心類說明:

類名

說明

org.apache.struts2.dispatcher. Dispatcher

該類有兩個作用:

1、初始化

2、調用指定的Actionexecute()方法。

org.apache.struts2.dispatcher. FilterDispatcher

這是一個過濾器。文檔中已明確說明,如果沒有經驗,配置時請將url-pattern的值設成/*

  該類有四個作用:

1、執行Action

2、清理ActionContext,避免內存泄漏

3、處理靜態內容(Serving static content

4、爲請求啓動xwork’s的截攔器鏈。

com.opensymphony.xwork2. ActionProxy

Action的代理接口。

com.opensymphony.xwork2. ctionProxyFactory

生產ActionProxy的工廠。

com.opensymphony.xwork2.ActionInvocation

負責調用Action和截攔器。

com.opensymphony.xwork2.config.providers. XmlConfigurationProvider

負責Struts2的配置文件的解析。




一個請求在Struts2框架中的處理大概分爲以下幾個步驟:
1、客戶端初始化一個指向Servlet容器(例如Tomcat)的請求;
2、這個請求經過一系列的過濾器(Filter)(這些過濾器中有一個叫做ActionContextCleanUp的可選過濾器,這個過濾器對於Struts2和其他框架的集成很有幫助,例如:SiteMesh Plugin);
3、接着FilterDispatcher被調用,FilterDispatcher詢問ActionMapper來決定這個請求是否需要調用某個Action;
4、如果ActionMapper決定需要調用某個Action,FilterDispatcher把請求的處理交給ActionProxy;
5、ActionProxy通過Configuration Manager詢問框架的配置文件,找到需要調用的Action類;
6、ActionProxy創建一個ActionInvocation的實例。
7、ActionInvocation實例使用命名模式來調用,在調用Action的過程前後,涉及到相關攔截器(Intercepter)的調用。
8、一旦Action執行完畢,ActionInvocation負責根據struts.xml中的配置找到對應的返回結果。返回結果通常是(但不總是,也可能是另外的一個Action鏈)一個需要被表示的JSP或者FreeMarker的模版。在表示的過程中可以使用Struts2 框架中繼承的標籤。在這個過程中需要涉及到ActionMapper。



三、Spring

Spring是一個免費開源的容器框架,它是爲了解決企業應用開發的複雜性而創建的。提起spring就不得不提起兩大核心思想:IoC和AOP

先談IoC,稱爲控制反轉,又叫依賴注入。其實不管是控制反轉還是依賴注入,他們都可以這樣理解:當某個Java實例(調用者)需要另一個Java實例(被調用者)時,在傳統的程序設計過程中,通常有調用者來創建被調用者的實例。但是在依賴注入/控制反轉模式下,創建被調用者的工作不再是有調用者來完成,而是由Spring容器來完成,然後注入調用者。

依賴注入通常有如下兩種:

 1、  設置注入:IoC容器使用屬性的setter方法來注入被依賴的實例。

 2、  構造注入:IoC容器使用構造器來注入被依賴的實例。

 Spring IoC容器有如下3個基本要點:

1、 應用程序的各個組件面向接口編程。面向接口編程可以將各個組件的耦合提升到接口層次,從而有利於項目後期的擴展。

2、 應用程序的各組件不再由程序主動產生,而是由Spring容器來負責產生,並初始化。

3、 Spring採用配置文件、或者Annotation來管理Bean的實現類、依賴關係,Spring容器則根據配置文件,利用反射機制來創建實例,併爲之注入依賴關係。



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