原創:spring入門介紹第一講

Red88Army發表於2020-04-06

一、Spring框架簡介 
Spring是一個開源框架,它由Rod Johnson建立。它是為了解決企業應用開發的複雜性而建立的。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅限於伺服器端的開發。從簡單性、可測試性和鬆耦合的角度而言,任何Java應用都可以從Spring中受益。
  ◆目的:解決企業應用開發的複雜性
  ◆功能:使用基本的JavaBean代替EJB,並提供了更多的企業應用功能
  ◆範圍:任何Java應用
  簡單來說,Spring是一個輕量級的控制反轉(IoC)和麵向切面(AOP)的容器框架。
  ◆輕量——從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個大小隻有1MB多的JAR檔案裡釋出。並且Spring所需的處理開銷也是微不足道的。此外,Spring是非侵入式的:典型地,Spring應用中的物件不依賴於Spring的特定類。
  ◆控制反轉——Spring通過一種稱作控制反轉(IoC)的技術促進了鬆耦合。當應用了IoC,一個物件依賴的其它物件會通過被動的方式傳遞進來,而不是這個物件自己建立或者查詢依賴物件。你可以認為IoC與JNDI相反——不是物件從容器中查詢依賴,而是容器在物件初始化時不等物件請求就主動將依賴傳遞給它。
  ◆面向切面——Spring提供了面向切面程式設計的豐富支援,允許通過分離應用的業務邏輯與系統級服務(例如審計(auditing)和事務(transaction)管理)進行內聚性的開發。應用物件只實現它們應該做的——完成業務邏輯——僅此而已。它們並不負責(甚至是意識)其它的系統級關注點,例如日誌或事務支援。
  ◆容器——Spring包含並管理應用物件的配置和生命週期,在這個意義上它是一種容器,你可以配置你的每個bean如何被建立——基於一個可配置原型(prototype),你的bean可以建立一個單獨的例項或者每次需要時都生成一個新的例項——以及它們是如何相互關聯的。然而,Spring不應該被混同於傳統的重量級的EJB容器,它們經常是龐大與笨重的,難以使用。
  ◆框架——Spring可以將簡單的元件配置、組合成為複雜的應用。在Spring中,應用物件被宣告式地組合,典型地是在一個XML檔案裡。Spring也提供了很多基礎功能(事務管理、持久化框架整合等等),將應用邏輯的開發留給了你。
  所有Spring的這些特徵使你能夠編寫更乾淨、更可管理、並且更易於測試的程式碼。它們也為Spring中的各種模組提供了基礎支援。


二、spring框架的7個模組
Spring 框架是一個分層架構,由 7 個定義良好的模組組成。Spring 模組構建在核心容器之上,核心容器定義了建立、配置和管理 bean 的方式,如圖所示:
[img]
http://dl.iteye.com/upload/picture/pic/89328/e61a5c13-201b-3596-b53a-2ae980a5e7c8.gif
[/img] 
組成Spring框架的每個模組(或元件)都可以單獨存在,或者與其他一個或多個模組聯合實現。每個模組的功能如下:1、核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要元件是 BeanFactory,它是工廠模式的實現。BeanFactory 使用控制反轉 (IOC) 模式將應用程式的配置和依賴性規範與實際的應用程式程式碼分開。
  2、Spring 上下文:Spring 上下文是一個配置檔案,向 Spring 框架提供上下文資訊。Spring 上下文包括企業服務,例如 JNDI、EJB、電子郵件、國際化、校驗和排程功能。
  3、Spring AOP:通過配置管理特性,Spring AOP 模組直接將面向方面的程式設計功能整合到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何物件支援 AOP。Spring AOP 模組為基於 Spring 的應用程式中的物件提供了事務管理服務。通過使用 Spring AOP,不用依賴 EJB 元件,就可以將宣告性事務管理整合到應用程式中。
  4、Spring DAO:JDBC DAO 抽象層提供了有意義的異常層次結構,可用該結構來管理異常處理和不同資料庫供應商丟擲的錯誤訊息。異常層次結構簡化了錯誤處理,並且極大地降低了需要編寫的異常程式碼數量(例如開啟和關閉連線)。Spring DAO 的面向 JDBC 的異常遵從通用的 DAO 異常層次結構。
  5、Spring ORM:Spring 框架插入了若干個 ORM 框架,從而提供了 ORM 的物件關係工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有這些都遵從 Spring 的通用事務和 DAO 異常層次結構。
  6、Spring Web 模組:Web 上下文模組建立在應用程式上下文模組之上,為基於 Web 的應用程式提供了上下文。所以,Spring 框架支援與 Jakarta Struts 的整合。Web 模組還簡化了處理多部分請求以及將請求引數繫結到域物件的工作。
  7、Spring MVC 框架:MVC 框架是一個全功能的構建 Web 應用程式的 MVC 實現。通過策略介面,MVC 框架變成為高度可配置的,MVC 容納了大量檢視技術,其中包括 JSP、Velocity、Tiles、iText 和 POI。Spring 框架的功能可以用在任何 J2EE 伺服器中,大多數功能也適用於不受管理的環境。Spring 的核心要點是:支援不繫結到特定 J2EE 服務的可重用業務和資料訪問物件。毫無疑問,這樣的物件可以在不同J2EE 環境(Web 或EJB)、獨立應用程式、測試環境之間重用。


三、下載和配置Spring開發環境
  (1)登入站點,下載Spring的最新穩定版本。最新版本為Spring Framework 3.0.5但課程介紹中以spring2.5.5為例,建議下載spring-framework-2.5.5-with-dependencies.zip這個壓縮包不僅包含Spring的開發包,而且包含Spring編譯和執行所依賴的第三方類庫。
  解壓縮下載到的壓縮包,解壓縮後的資料夾應用如下幾個資料夾。
  ◆dist:該資料夾下放Spring的jar包,通常只需要Spring.jar檔案即可。該資料夾下還有一些類似spring-Xxx.jar的壓縮包, 這些壓縮包是spring.jar壓縮包的子模組壓縮包。除非確定整個J2EE應用只需要使用Spring的某一方面時,才考慮使用這中分模組壓縮包。通常建議使用Spring.jar
  ◆docs:該資料夾下包含spring的相關文件、開發指南及API參考文件。
  ◆lib:該資料夾下包含spring編譯和執行所依賴的第三方類庫,該路徑下的類庫並不是spring必需的,但如果需要使用第三方類庫的支援,這裡的類庫就是必需要的。
  ◆samples:該資料夾下包含Spring的幾個簡單例子,可作為Spring入門學習的案例。
  ◆src:該資料夾下包含Spring的全部原始檔,如果開發過程中有地方無法把握,可以參考該原始檔,瞭解底層實現。
◆test:該資料夾下包含Spring的測試示例。
  ◆tiger:該路徑下存放關於JDK的相關內容
  ◆解壓縮後的資料夾下,還包含一些關於Spring的License和專案相關檔案
  (2)將spring.jar複製到專案的CLASSPATH路徑下,對於Web應用,將spring.jar檔案複製到WEB-INF/lib路徑下,該應用即可以利用Spring框架了。
(3)通常Spring的框架還依賴於其他一些jar檔案,因此還須將lib下對應的包複製到WEB-INF/lib路徑下,具體要複製哪些jar檔案,取決於應用所需要使用的專案。通常需要複製cglib,dom4j,jakarta-commons,log4j等資料夾下的jar檔案。

下面我們就以Java專案為例來搭建一個spring的開發環境.
(1) 建立一個Java的專案例如專案名稱為lession01
(2) 在lession01專案中建立lib資料夾
(3) 引入spring類庫
找到 ${spring解壓目錄}/dist/spring.jar(全包)
${spring解壓目錄}/lib/jakarta-commons/commons-logging.jar.
複製到lib資料夾下,按著ctrl選擇spring.jar與commons-loggin.jar右鍵點選新增Build Path 選擇->add Build to Path 點選即可。
(4) 建立spring配置檔案.src/applicationContext.xml
${spring解壓目錄}/docs/reference/html_single/index.html/3.2.1.1.Configuration metadata
<?xml version="1.0" encoding="UTF-8"?>
<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.5.xsd">
</beans>
(5) 建立GreetingService介面
package cn.redarmy_chen.service;

public interface GreetingService {
void say();
}

(6) 建立CreetingServiceImpl類實現了GreetingService介面
package cn.redarmy_chen.service;

public class GreetingServiceImpl implements GreetingService {

/** 屬性宣告 */
private String content;

/** 屬性對應的set方法 依賴注入的方式 */
public void setContent(String content) {
this.content = content;
}

/** 重寫介面中的方法 */
@Override
public void say() {
/** 列印輸入依賴注入的屬性content的內容 */
System.out.println("你打的招呼內容是:" + content);
}

}
(7) 在配置檔案中新增bean的宣告
<?xml version="1.0" encoding="UTF-8"?>
<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.5.xsd">

<!-- 宣告bean -->
<bean id="greetingServiceImpl" class="cn.redarmy_chen.service.GreetingServiceImpl">
<property name="content" value="hello! redarmy"/>
</bean>
</beans>
(8) 建立測試類

package cn.redarmy_chen.service;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App {

@Test
public void test() {
/** 載入容器 */
ApplicationContext ac = new ClassPathXmlApplicationContext(
"classpath:applicationContext.xml");

/** 得到業務bean */
GreetingService greetingService = (GreetingService) ac
.getBean("greetingServiceImpl");

/** 測試方法 */
greetingService.say();
}

}


以上內容歸redarmy_chen原創,如需轉載請附帶出處,如有疑問請傳送郵件至redarmy_chen@qq.com

相關文章