Hello 大家好!
在我們開始學習Spring framework之前(以下簡稱Spring),先對這個幾近「萬能」的框架有個基本的認識吧!
Spring是一個開源的Java應用程式框架,它提供了一個良好的基礎建設,我們可以在上面開發出結構良好、容易維護、容易測試的應用程式,只要事先搭建好這個框架,我們就可以把大部份的心力都專注在核心業務邏輯的實作。換句話說,Spring就是為了簡化開發Java應用程式的複雜性而存在的。
那麼Spring從哪些面向來讓Java開發人員的生活比較輕鬆一點呢?
從底層基礎的面向來看:
- 透過介面(interface)以及依賴注入(dependency injection),來實現元件之間的鬆散藕合(loose coupling)
- 這麼一來,元件之間都是透過介面來溝通,彼此的底層實作如果有異動,也不致於影響整個流程的運作
- 再者,元件本身不必知道如何建立或取得相依元件的參考(reference),而是統一透過Spring這樣的IoC (inversion of control)容器來處理元件的建立以及依照事前的設定來注入所相依的元件
- 結構鬆散的元件架構也讓開發人員在作單元測試(unit testing)時變的容易舉例來說,假設系統內支援多種登入方式
123456789101112131415public interface LoginService{User login(String name, String password);}@Servicepublic class DBLoginService implements LoginService{//省略實作}@Servicepublic class OAuthLoginService implements LoginService{//省略實作}@Servicepublic class LDAPLoginService implements LoginService{//省略實作}
對於呼叫方來說,可以透過設定的方式來選用符合需求的登入方式,在程式碼一律透過interface來呼叫
123456789101112131415@Controllerpublic class LoginController{@Qualifier("oAuthLoginService") // <-- 這裡指定哪種login實作@Autowiredpublic class LoginService loginService; //<-- 宣告interface型別public void doLogin(String name, String password){//...User user = loginService.login(name,password);//...}}
- 支援AOP (aspect oriented programming)
- Spring AOP 採用宣告式的作法來為系統流程統一「加上」額外的功能,例如logging, 交易管理(transaction management), 安全性控管(security management)…等等,這些功能的增減並不會影響原本已寫好的程式碼
從實際運用的面向來看:
- Spring定義了許多”template”來簡化原本重複、繁雜甚至「囉唆」的程式碼,請回想一下JDBC裡面 Connection, Statement, ResultSet的建立、關閉等等動作,在Spring裡 JdbcTemplate 會是你的好幫手
1234567891011Actor actor = this.jdbcTemplate.queryForObject("select first_name, last_name from t_actor where id = ?",new Object[]{1212L},new RowMapper<Actor>() {public Actor mapRow(ResultSet rs, int rowNum) throws SQLException {Actor actor = new Actor();actor.setFirstName(rs.getString("first_name"));actor.setLastName(rs.getString("last_name"));return actor;}}); - Spring 包山包海的支援各種需求,從資料庫、交易管理、message queue到web, view層都有提供支援
初學Spring的各位,請先別被上面一大堆專有名詞嚇到,之後將會為各位一一解釋!
用了Spring這麼多年,個人認為Spring對於Java開發人員來說,就好像馬蓋先手上那把瑞士刀,通常我們不會一下子用到所有的工具,但我們有必要知道每個工具的特性,才能在不同的狀況需求下挑選出最棒的黃金組合!
下個主題將為大家解釋 Spring核心概念- dependency injection
Facebook Comments