1. 程式人生 > >簡單談談自己對SSH框架的理解

簡單談談自己對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容器則根據配置檔案,利用反射機制來建立例項,併為之注入依賴關係。