迅速掌握Spring框架

迅速掌握Spring框架

Spring框架是SSH三劍客當中比較難理解的,然而它的意義對於軟件來說是一場革命,完全顛覆了軟件開發的流程。例如控制反轉、依賴倒置這些高深的概念讓我們無比膜拜,又讓我們覺得離自己的日常使用是那麼遙遠,這也導致了很多公司會很順理成章的去用Struts和Hibernate,因爲這二者會提升公司產品的效率。然而關於軟件開發,如何讓開發變得簡單,讓組件真正實現解耦卻很少被公司考慮或者關心。然而現在軟件開發已經不是以前的作坊式的,不是單兵作戰就可以完成的,現在講究的是集團作戰,多開發小組協同合作。

本文將通過一個最簡單的例子讓你能夠掌握Spring框架,首先需要準備兩個外部jar包:
1. spring.jar
2. common-logging-1.1.1.jar

新建Java project,命名爲Demo,在Demo工程下新建一個包,不能使用default包,必須按照規範命名包,例如com.discover.test,否則後續spring找不到對應的bean。

在com.discover.test下新增Action接口,裏面定義execute方法。

package com.discover.test;

/**
 * @author Administrator
 *
 */
public interface Action {
    public String execute(String s);
}

在com.discover.test下新增UpperActionImpl實現Action接口:

package com.discover.test;

/**
 * @author Administrator
 *
 */
public class UpperActionImpl implements Action {
    private String message;


    public String getMessage() {
        return message;
    }


    public void setMessage(String message) {
        this.message = message;
    }


    /* (non-Javadoc)
     * @see Action#execute(java.lang.String)
     */
    @Override
    public String execute(String s) {
        // TODO Auto-generated method stub
        return s+","+message.toUpperCase();
    }

}

新增一個bean.xml配置文件放到工程目錄下,即和.project和.classpath放在同一級目錄,否則bean文件訪問不到。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
  <description></description>
  <bean id="TestAction" class="com.discover.test.UpperActionImpl">
    <property name="message">
      <value>happy birthday!</value>
    </property>
  </bean>
</beans>

最後寫一個測試類來測試下我們剛纔所做的工作實現什麼樣的效果。

package com.discover.test;

import org.apache.commons.logging.Log;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

/**
 * @author Administrator
 *
 */
public class Test {
    /**
     * @param args
     */
    public static void main(String[] args) {
        try {
            testSpring();
        } catch (Exception e) {
            System.out.println(e.toString());
        }

    }

    public static void testSpring() {
        ApplicationContext context = new FileSystemXmlApplicationContext("bean.xml");
        Action action = (Action)context.getBean("TestAction");
        System.out.println(action.execute("jack"));
    }
}

執行Test.java文件,在控制檯可以看到:jack,HAPPY BIRTHDAY!

在bean.xml中配置的是小寫的happy birthday,UpperActionImpl實現類的功能就是打印出輸入的參數和在bean.xml配置的字符串,並以大寫的形式打印。

最後看下工程目錄:
這裏寫圖片描述

不知道各位看到此處詫異Spring的強大沒,也許大家都聽說過依賴注入和控制反轉,每次看了這些高大上的名詞的解釋後似懂非懂,過後再看到這些名詞或者被別人問到,又不能說出它們的作用,那是因爲如果沒有實際的操作,認真的思考,是無法理解Spring的強大。依賴注入在我看來就是在運行時爲組件配置所需資源,將原本需要在代碼中指定的東西放到配置中,從而降低耦合。組件間的依賴不再是類或者接口,可以將類或者接口能提供的資源包裝成服務放到bean文件中,通過bean文件對外暴露,這樣不僅隱藏了內部實現,也降低了組件間的耦合性,提升代碼的可重用性。

說到這裏,也許有的人會想到工廠模式,當初會因爲使用工廠模式一定程度上解決了代碼的耦合性,提升了開發效率,然而有新的業務時除了寫一種新的實現類外還要修改工廠類,修改工廠類是我們不希望,因爲這並沒有實現真正意義上的解耦。因此Spring的理念確實非常新穎,現在再回過頭來理解控制反轉,即獲得對象不在代碼中實現,放到配置中實現;依賴注入,即將依賴的資源不在代碼中獲取,推遲到運行的時候,從配置中注入。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章