Spring的概述

Spring的歷史
Spring的初衷與目標
Spring框架
第一個Spring程序

Spring的歷史
要講到Spring的歷史,就要先回顧一下J2EE的歷史,J2EE應用程序的廣泛實現是在2000年開始的,它的出現帶來了諸如事務管理之類的核心中間層概念的標準化,但是在實踐中並沒有獲得絕對的成功,因爲開發效率,開發難度和實際的性能都令人失望。
Spring出現的一個最大的目標就是使J2EE開發變得更加容易。同時,Spring之所以與Struts、 Hibernate等單層框架不同,是因爲Spring致力於提供一個以統一的、高效的方式構造整個應用,並且可以將單層框架以最佳的組合揉和在一起建立一個連貫的體系。可以說Spring是一個提供了更完善開發環境的框架,可以爲普通的Java對象提供企業級的服務。

Spring的初衷與目標
Spring的初衷
J2EE開發應該更加簡單。
使用接口而不是使用類,是更好的編程習慣。Spring將使用接口的複雜度幾乎降低到了零。
爲JavaBean提供了一個更好的應用配置框架。
更多地強調面向對象的設計,而不是現行的技術,如J2EE。
儘量減少不必要的異常捕捉。
使應用程序更加容易測試。
Spring的目標
可以令人方便愉快的使用Spring。
應用程序代碼並不依賴於Spring APIs。
Spring不和現有的解決方案競爭,而是致力於將它們融合在一起。


Spring框架
Spring框架包含許多特性,並被很好地組織在下圖所示的七個模塊中
加圖

Spring Core
Core 封裝包是框架的最基礎部分,提供IoC和依賴注入特性。這裏的基礎概念是BeanFactory,它提供對Factory模式的經典實現來消除對程序性單例模式的需要,並真正地允許你從程序邏輯中分離出依賴關係和配置。
Spring Context
構建於Core封裝包基礎上的 Context封裝包,提供了一種框架式的對象訪問方法,有些象JNDI註冊器。Context封裝包的特性得自於Beans封裝包,並添加了對國際化(I18N)的支持(例如資源綁定),事件傳播,資源裝載的方式和Context的透明創建,比如說通過Servlet容器。
Spring DAO
DAO 提供了JDBC的抽象層,它可消除冗長的JDBC編碼和解析數據庫廠商特有的錯誤代碼。 並且,JDBC 封裝包還提供了一種比編程性更好的聲明性事務管理方法,不僅僅是實現了特定接口,而且對所有的POJOs(plain old Java objects)都適用。
Spring ORM
ORM 封裝包提供了常用的“對象/關係”映射APIs的集成層。 其中包括JPA、JDO、Hibernate 和 iBatis 。利用ORM封裝包,可以混合使用所有Spring提供的特性進行“對象/關係”映射,如前邊提到的簡單聲明性事務管理。
Spring AOP
Spring的 AOP 封裝包提供了符合 AOP Alliance規範的面向方面的編程(aspect-oriented programming)實現,讓你可以定義,例如方法攔截器(method-interceptors)和切點(pointcuts),從邏輯上講,從而減弱代碼的功能耦合,清晰的被分離開。
Spring Web
Spring中的 Web 包提供了基礎的針對Web開發的集成特性,例如多方文件上傳,利用Servlet listeners進行IoC容器初始化和針對Web的application context。當與WebWork或Struts一起使用Spring時,這個包使Spring可與其他框架結合。
Spring Web MVC
Spring中的 MVC 封裝包提供了Web應用的Model-View-Controller(MVC)實現。Spring的MVC框架並不是僅僅提供一種傳統的實現,它提供了一種 清晰的 分離模型,在領域模型代碼和web form之間。並且,還可以藉助Spring框架的其他特性。

第一個Spring程序
下載Spring相關的jar文件
簡單的Bean
package org.fire;

//一個簡單的JavaBean
public class HelloBean {
    private String helloWorld;

    public String getHelloWorld() {
        return helloWorld;
    }

    public void setHelloWorld(String helloWorld) {
        this.helloWorld = helloWorld;
    }
}

Bean的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!-- Bean定義的文件中的根節點 -->
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
    <!-- 爲每一個Bean進行設置 -->
    <!-- 設置Bean實例的識別名稱 -->
    <!-- 指定Bean的類名稱 -->
    <bean id="helloBean" class="org.fire.HelloBean">
        <!-- 設置Setter的名稱 -->
        <property name="helloWorld">
            <!-- 設置要注入的字符串值 -->
            <value>Hello!fire</value>
        </property>
    </bean>
</beans>

示範程序
package org.fire;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
//示範程序
public class SpringDemo {
    public static void main(String[] args) {
        // 在classpath下讀取指定的Bean定義文件
        Resource rs = new ClassPathResource("beans-config.xml");
        // 定義並建立BeanFactory
        // Spring所提供的IoC容器
        BeanFactory factory = new XmlBeanFactory(rs);
        // 指定Bean的名稱來取得Bean實例
        HelloBean hello = (HelloBean) factory.getBean("helloBean");
        System.out.println(hello.getHelloWorld());
    }
}

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