### Spring框架
Spring有春天、彈簧、跳躍和泉眼的意思。Spring是一個開源的框架,是為了解決企業應用程序開發復雜性由RodJohnson創建的。雖然Spring是為企業級應用推出的,但是所有的java系統開發都可以使用Spring,包括桌面應用程序和企業級Web應用。Spring總不是憑空而出現的,任何框架也是,前面我們所說的struts和hibernate都有他出現的原因,以及是哪些問題促使了人們開發出新的框架。那為什么使用Spring框架呢?
### 從抽象工廠開始說起
曾近我們在Dao層為了解決更換數據庫的難題,我們自己動手寫工廠,讓工廠去創建從而在客戶端調用時隱藏了具體的創建細節,這樣我們就可以更換數據庫了。在Service層也同樣是可以用到抽象工廠,為了適應用戶需求變動,我們在sevice層應用抽象工廠,讓web調用只調用接口,具體創建放到工廠里,這樣我們就可以通過更換不同的.class文件來更換不同的業務實現。下面我們就簡單的通過一個程序來說明。
Dao層
UserDao接口代碼如下所示。
~~~
public interface UserDao {
public void addUser(String username,String password);
}
Dao層UserDao實現UserDaoMySqlImpl.java
public class UserDao4MySqlImpl implements UserDao {
@Override
public void addUser(String username, String password) {
System.out.println("UserDao4MySqlImpl.addUser()");
}
}
~~~
Dao層UserDao實現UserDaoOracleImpl.java
~~~
public class UserDao4OracleImpl implements UserDao {
@Override
public void addUser(String username, String password) {
System.out.println("UserDao4OracleImpl.addUser()");
}
}
~~~
這樣我們創建了Dao層的接口,并且給出了對于不同數據庫驅動的不同實現。
業務邏輯層manager(在這里先不引入工廠)
Manager層接口UserManager.java
~~~
public interface UserManager {
public void addUser(Stringusername,String password);
}
~~~
Manager層實現UserManagerImpl.java
~~~
public class UserManagerImpl implements UserManager {
@Override
public void addUser(String username, String password) {
//服務(對象)定位,由我們的應用程序負責服務(對象)定位.//主動
//UserDao userDao = new UserDao4MySqlImpl();
//如果想要換實現,就要可以換了.
UserDao userDao = new UserDao4OracleImpl();
userDao.addUser(username,password);
}
}
~~~
在這里尚且沒有使用抽象工廠+配置文件,來看我們的客戶端調用。
~~~
public class client {
/**
* @param args
*/
public static void main(String[] args) {
//TODO Auto-generated method stub
//服務(對象)定位,由我們的應用程序負責服務(對象)定位.
//因為自己產生了主動的查找.所以必須依賴,并且寫死.
UserManager userManager = new UserManagerImpl();
userManager.addUser("張三","123");
}
}
~~~
我們如果要更換數據庫需要打開UserManagerImpl類去更改不同的實現,同樣在client調用如果要更改不同的業務也需要不同的UserManager實現。即便我們加上抽象工廠+配置文件同樣同樣需要在界面調service層使用和在調用Dao層使用,讓程序變的更加復雜,每個項目都要去寫,多個項目也是如此,當業務邏輯復雜的時候,我們就需要些多個工廠去創建不同的產品,并且在使用工廠的時候還要注意每次創建保證一個實例,這所有的一切一切,即便是工廠都是我們程序員手動去寫的,這樣就比較重復了,是我們去管理這些類,為什么不讓機器去管理呢?
所以Spring應運而生,Spring封裝了更多的重復和復雜,不但封裝了工廠,并且封裝了創建時出現的線程安全問題,Spring可以管理Connection,在使用hibernate的時候我們需要管理session,一線程一session,session連接我們lazy的有效期,spring提供一個Filter,我們不用再管理session的創建和銷毀,spring幫我們去管理了。
### 下面大概了解一下Spring中將會時常提起的一些名詞。
簡單的來說,Spring是一個輕量級的控制反轉(IOC)和面向切面(AOP)的容器框架。
**輕量級**:大小與開銷方面而言Spring是輕量的。
**非侵入式**:Spring應用中的對象不依賴于Spring的特定類。
**控制反轉**:Spring通過一種稱為控制反轉(IOC)的技術促進了松耦合。當應用了IOC一個對象依賴的其他對象會通過被動的方式傳遞進來,而不是這個對象自己創建或者查找依賴對象。
**切面編程**:Spring提供了切面編程的豐富支持,允許分離應用的業務邏輯與服務。
**容器**:Spring包含并管理應用對象的配置和生命周期,在這個意義上它是一種容器,你可以配置你的每個bean如何被創建—一個可配置的原型(prototype),你的bean可以創建一個單獨的實例或者每次需要時都生成一個新的實例,以及它們是如何關聯的。
**框架**:Spring可以將簡單的組件配置,組成為復雜的應用,在Spring中應用對象被聲明式組合,典型地是在一個XML文件里,Spring提供了很多基礎功能(事務管理、持久化框架集成等等),將應用邏輯的開發留給了我們。
大概知道這些名詞吧,后續的文章會應用實例詳細的說明Spring的功能。
下篇我們將把上述的例子用Spring來實現,從而對比出Spring的IOC強大之處。
- 前言
- Struts旅程(一)Struts簡介和原理
- struts旅程(二)Struts登錄示例
- Struts旅程(三)Struts表單處理器ActionForm(靜態動態)
- Struts旅程(四)MVC向struts MVC框架演變過程
- Struts旅程(五)struts控制器DispatchAction
- Struts旅程(六)Struts頁面轉發控制ActionForward和ActionMapping
- Hibernate旅程(一)Hibernate架構概述
- Hibernate旅程(二)Hibernate實例
- Hibernate旅程(三)Hibernate持久化對象的三個狀態
- Hibernate旅程(四)Hibernate對數據庫刪除、查找、更新操作
- Hibernate旅程(五)Hibernate映射--基本類映射和對象關系映射
- Hibernate旅程(六)Hibernate映射--繼承映射
- Hibernate旅程(七)Hibernate緩存機制--一級緩存
- Hibernate旅程(八)Hibernate緩存機制--二級緩存
- Hibernate旅程(九)Hibernate緩存機制--查詢緩存
- Spring旅程(一)為什么使用Spring
- Spring旅程(二)非Spring向Spring過渡-- Spring IOC容器的使用
- Spring旅程(三) AOP--Spring AOP容器基礎
- Spring旅程(四) AOP--Spring AOP實例
- SSH旅程(五)Spring運用到Hibernate中
- SSH旅程(六)Spring和struts結合(方案一)