複製鏈接
請複製以下鏈接發送給好友

spring框架

鎖定
Spring框架是由於軟件開發的複雜性而創建的。Spring使用的是基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅僅限於服務器端的開發。從簡單性、可測試性和松耦合性角度而言,絕大部分Java應用都可以從Spring中受益。
中文名
Spring框架
外文名
Spring Framework
創建原因
軟件開發的複雜性
目    的
解決企業應用開發的複雜性
功    能
使用基本的JavaBean代替EJB
範    圍
任何Java應用

spring框架起源

要談Spring的歷史,就要先談J2EE。J2EE應用程序的廣泛實現是在1999年和2000年開始的,它的出現帶來了諸如事務管理之類的核心中間層概念的標準化,但是在實踐中並沒有獲得絕對的成功,因為開發效率,開發難度和實際的性能都令人失望。
曾經使用過EJB開發JAVA EE應用的人,一定知道,在EJB開始的學習和應用非常的艱苦,很多東西都不能一下子就很容易的理解。EJB要嚴格地實現各種不同類型的接口,類似的或者重複的代碼大量存在。而配置也是複雜和單調,同樣使用JNDI進行對象查找的代碼也是單調而枯燥。雖然有一些開發工作隨着xdoclet的出現,而有所緩解,但是學習EJB的高昂代價,和極低的開發效率,極高的資源消耗,都造成了EJB的使用困難。而Spring出現的初衷就是為了解決類似的這些問題。
Spring的一個最大的目的就是使JAVA EE開發更加容易。同時,Spring之所以與Struts、Hibernate等單層框架不同,是因為Spring致力於提供一個以統一的、高效的方式構造整個應用,並且可以將單層框架以最佳的組合揉和在一起建立一個連貫的體系。可以説Spring是一個提供了更完善開發環境的一個框架,可以為POJO(Plain Ordinary Java Object)對象提供企業級的服務。
Spring的形成,最初來自Rod Jahnson所著的一本很有影響力的書籍《Expert One-on-One J2EE Design and Development》,就是在這本書中第一次出現了Spring的一些核心思想,該書出版於2002年。另外一本書《Expert One-on-One J2EE Development without EJB》,更進一步闡述了在不使用EJB開發JAVA EE企業級應用的一些設計思想和具體的做法。有時間了可以詳細的研讀一下。
Spring的初衷:
1、JAVA EE開發應該更加簡單。
2、使用接口而不是使用類,是更好的編程習慣。Spring將使用接口的複雜度幾乎降低到了零。
3、為JavaBean提供了一個更好的應用配置框架。
4、更多地強調面向對象的設計,而不是現行的技術如JAVA EE。
5、儘量減少不必要的異常捕捉。
6、使應用程序更加容易測試。
Spring的目標:
1、可以令人方便愉快的使用Spring。
2、應用程序代碼並不依賴於Spring APIs。
3、Spring不和現有的解決方案競爭,而是致力於將它們融合在一起。
Spring的基本組成:
1、最完善的輕量級核心框架。
2、通用的事務管理抽象層。
3、JDBC抽象層。
4、集成了Toplink, Hibernate, JDO, and iBATIS SQL Maps。
5、AOP功能。
6、靈活的MVC Web應用框架。

spring框架Spring

spring框架認證概述

Spring認證框架是一個開放源代碼的J2EE應用程序框架,由Rod Johnson發起,是針對bean的生命週期進行管理的輕量級容器(lightweight container)。 [1]  Spring是Java EE編程領域的一個輕量級開源框架,該框架由一個叫Rod Johnson的程序員在 2002 年最早提出並隨後創建,是為了解決企業級編程開發中的複雜性,實現敏捷開發的應用型框架 。 [2] 

spring框架教育中心概述

2021年2月,VMware公司授權北京中科卓望網絡科技有限公司正式成為VMware Tunzu Spring中國教育管理中心,負責Spring國際認證體系標準在中國教育行業的推廣工作。 [3] 

spring框架優點

◆JAVA EE應該更加容易使用。
面向對象的設計比任何實現技術(比如JAVA EE)都重要。
面向接口編程,而不是針對類編程。Spring將使用接口的複雜度降低到零。(面向接口編程有哪些複雜度?)
◆代碼應該易於測試。Spring框架會幫助你,使代碼的測試更加簡單。
◆JavaBean提供了應用程序配置的最好方法。
◆在Java中,已檢查異常(Checked exception)被過度使用。框架不應該迫使你捕獲不能恢復的異常。

spring框架簡介

Spring:
Spring是一個開源框架,它由Rod Johnson創建。它是為了解決企業應用開發的複雜性而創建的。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅限於服務器端的開發。從簡單性、可測試性松耦合的角度而言,任何Java應用都可以從Spring中受益。
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框架模塊

Spring框架由七個定義明確的模塊組成(圖1.1)。
Spring框架圖 Spring框架圖
(Spring框架概覽圖1.1)
如果作為一個整體,這些模塊為你提供了開發企業應用所需的一切。但你不必將應用完全基於Spring框架。你可以自由地挑選適合你的應用的模塊而忽略其餘的模塊。
就像你所看到的,所有的Spring模塊都是在核心容器之上構建的。容器定義了Bean是如何創建、配置和管理的——更多的Spring細節。當你配置你的應用時,你會潛在地使用這些類。但是作為一名開發者,你最可能對影響容器所提供的服務的其它模塊感興趣。這些模塊將會為你提供用於構建應用服務的框架,例如AOP和持久性。
核心容器
這是Spring框架最基礎的部分,它提供了依賴注入(DependencyInjection)特徵來實現容器對Bean的管理。這裏最基本的概念是BeanFactory,它是任何Spring應用的核心。BeanFactory是工廠模式的一個實現,它使用IoC將應用配置和依賴説明從實際的應用代碼中分離出來。
應用上下文(Context)模塊
核心模塊的BeanFactory使Spring成為一個容器,而上下文模塊使它成為一個框架。這個模塊擴展了BeanFactory的概念,增加了對國際化(I18N)消息、事件傳播以及驗證的支持。
另外,這個模塊提供了許多企業服務,例如電子郵件JNDI訪問、EJB集成、遠程以及時序調度(scheduling)服務。也包括了對模版框架例如Velocity和FreeMarker集成的支持。
Spring的AOP模塊
Spring在它的AOP模塊中提供了對面向切面編程的豐富支持。這個模塊是在Spring應用中實現切面編程的基礎。為了確保Spring與其它AOP框架的互用性,Spring的AOP支持基於AOP聯盟定義的API。AOP聯盟是一個開源項目,它的目標是通過定義一組共同的接口和組件來促進AOP的使用以及不同的AOP實現之間的互用性。通過訪問他們的站點,你可以找到關於AOP聯盟的更多內容。
Spring的AOP模塊也將元數據編程引入了Spring。使用Spring的元數據支持,你可以為你的源代碼增加註釋,指示Spring在何處以及如何應用切面函數。
JDBC抽象和DAO模塊
使用JDBC經常導致大量的重複代碼,取得連接、創建語句、處理結果集,然後關閉連接。Spring的JDBC和DAO模塊抽取了這些重複代碼,因此你可以保持你的數據庫訪問代碼乾淨簡潔,並且可以防止因關閉數據庫資源失敗而引起的問題。
這個模塊還在幾種數據庫服務器給出的錯誤消息之上建立了一個有意義的異常層。使你不用再試圖破譯神秘的私有的SQL錯誤消息!
另外,這個模塊還使用了Spring的AOP模塊為Spring應用中的對象提供了事務管理服務
對象/關係映射集成模塊
對那些更喜歡使用對象/關係映射工具而不是直接使用JDBC的人,Spring提供了ORM模塊。Spring並不試圖實現它自己的ORM解決方案,而是為幾種流行的ORM框架提供了集成方案,包括HibernateJDO和iBATIS SQL映射。Spring的事務管理支持這些ORM框架中的每一個也包括JDBC。
Spring的Web模塊
Web上下文模塊建立於應用上下文模塊之上,提供了一個適合於Web應用的上下文。另外,這個模塊還提供了一些面向服務支持。例如:實現文件上傳的multipart請求,它也提供了Spring和其它Web框架的集成,比如Struts、WebWork。
Spring的MVC框架
Spring為構建Web應用提供了一個功能全面的MVC框架。雖然Spring可以很容易地與其它MVC框架集成,例如Struts,但Spring的MVC框架使用IoC對控制邏輯和業務對象提供了完全的分離。
它也允許你聲明性地將請求參數綁定到你的業務對象中,此外,Spring的MVC框架還可以利用Spring的任何其它服務,例如國際化信息與驗證。
Spring框架Web頁面亂碼問題
在做java Web 項目時,亂碼問題時常都會出現,解決方法也不盡相同,有簡單也有複雜的;如果加入了Spring框架之後就不一樣了,可以採用Spring框架自帶的過濾器CharacterEncodingFilter,這樣可以大大減輕了我們的工作量,即簡單方便又容易理解,配置方式如下:在web.xml文件中filter的位置加上如下內容:
<filter>
    <filter-name>encodingFilter</filter-name >
    <filter-class>
        org.springframework.web.filter.CharacterEncodingFilter
    </filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>*</url-pattern>
</filter-mapping>

spring框架demo通用步驟

spring框架1.框架作用

SpringMVC框架作用
解決了V-C的交互問題,即視圖與控制器的交互問題。
在原生的Java EE技術中,使用Servlet作為項目中的控制器,用於接收用户的請求,並給予響應結果。這種做法最大的問題在於:在常規做法中,每個Servlet對應1個請求路徑,例如LoginServlet處理login.com的請求,而RegisterServlet處理register.com的請求,所以,會導致Servlet數量太多,不便於管理(無論從源文件的數量,還是從配置文件的內容),且對象太多進而佔用大量內存空間的問題!
並且,在請求的處理過程中,還存在許多操作不簡便的做法!

spring框架1.2. 核心組件

SpringMVC核心組件
  1. DispatcherServlet
前端控制器,主要職責是接收所有請求(根據配置文件來決定),並將請求轉發給對應的控制器,接收控制器的處理結果,確定最終由哪個視圖完成響應!
  1. HandlerMapping
處理請求路徑與控制器的映射關係。
  1. Controller
實際處理請求的組件,例如接收請求參數,決定最終是轉發或重定向的方式來響應。
  1. ModelAndView
控制器的處理結果,其中的Model表示轉發的數據(如果是重定向,則Model沒有意義),而View表示最終負責響應的視圖組件的名稱。
  1. ViewResolver
根據視圖組件的名稱,確定具體使用的是哪個視圖組件。
SpringMVC工作流程圖 SpringMVC工作流程圖
1.3. SpringMVC-HelloWorld
1.3.1. 創建項目
創建Maven Project,勾選Create a simple project,然後,Group Id值為cn.edu.spring(根據自己實際需要來決定),Artifact Id值為SPRINGMVC-01-HELLOWORLD(這個名稱根據自己的實際來寫),Packaging選擇war:
接下來,需要執行4個步驟(以後每次創建項目時都需要做的事情):
  1. 生成web.xml文件;
  2. 添加依賴:在此前的項目中找到pom.xml,將其中的依賴的代碼複製到當前項目中,關於依賴的jar包,會越用越多,學習時,只加不減;
  3. 複製spring.xml文件到當前項目中,並刪除其中的配置,除非你確定這些配置是當前項目中必須使用的;
  4. 為項目添加Tomcat運行環境;
1.3.2. 配置DispatcherServlet
由於需要DispatcherServlet接收所有請求,所以,首先必須在web.xml配置它:
<!-- 配置DispatcherServlet --> 
<servlet>    
     <servlet-name>SpringMVC</servlet-name>    
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
 </servlet> 
 <servlet-mapping>  
    <servlet-name>SpringMVC</servlet-name>   
    <url-pattern>*.com</url-pattern> 
 </servlet-mapping>

經過以上配置,則任何以.com作為後綴的請求,都將由DispatcherServlet來處理!
由於項目是基於Spring的,希望項目啓動時就加載Spring的配置文件,並使得DispatcherServlet已經完成初始化可以隨時接收請求,所以,還需進一步的配置:
<!-- 配置DispatcherServlet -->
<servlet>    
    <servlet-name>SpringMVC</servlet-name>    
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>    <!-- 配置spring的配置文件 -->    
    <init-param>        
        <param-name>contextConfigLocation</param-name>備註:這個name是源碼中的,固定                
        <param-value>classpath:spring.xml</param-value>備註:值要看個人的配置文件的路徑    
    </init-param>    
    <!-- 啓動Tomcat時即初始化該Servlet -->    
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>    
    <servlet-name>SpringMVC</servlet-name>    
    <url-pattern>*.com</url-pattern>
</servlet-mapping>
至此,當項目啓動時,就會初始化DispatcherServlet,並且,在初始化過程中,會加載Spring的配置文件。
測試
如果Spring能正常工作,則配置是成功的!
在src\main\java中創建一個測試類cn.edu.spring.test.Test,並且,顯式的添加構造方法,並輸出內容:
@Component public class Test {
    public Test() {
        System.out.println("已經加載Spring配置文件!");    
    } 
}

然後,在Spring的配置文件中添加組件掃描:
<context:component-scan base-package="cn.edu.spring" />
最終,把項目部署到Tomcat,並啓動Tomcat,在啓動日誌中如果能夠看到以上輸出語句,則成功!
發出請求http://localhost:8080/項目名稱/hello.com,要求在界面中顯示HelloWorld字樣。
1.3.4. 處理請求
以上完成了流程中的第1步,接下來,如果發出hello.do請求,就會被DispatcherServlet接收得到,然後,DispatcherServlet應該根據hello.do請求路徑去詢問HandlerMapping得知由哪個控制器去處理請求,原始的實現方式是使用SimpleUrlHandlerMapping類去進行配置,不過,這種配置方式非常麻煩,而且,對應關係不明確(所有的路徑與控制器的配置都在同一個配置文件中,導致不便於管理),所以,後續都是使用註解完成相關配置,則在開發過程中,跳過第2步和第3步(只是開發時不用關注,框架的執行流程不變)。
為了確保有控制器處理請求,所以,創建HelloController:
所有的控制器都應該是由Spring管理的,所以,需要為控制器類添加@Controller註解:
@Controllerpublic class HelloController {}
然後,在類中自定義處理請求的方法,方法的訪問權限是public的,返回值暫時使用String,方法的名稱可以自由定義,方法的參數暫時留空:
public String showHello() { 
}

在SpringMVC中,請求對應的可以是某個方法,而不一定每個請求對應一個控制器類,如果請求對應的是以上方法,則需要在方法的聲明之前添加@RequestMapping("/hello.com"):
@RequestMapping("/hello.com")public String showHello() {}
完成以上步驟後,即表示:路徑為/hello.com的請求將觸發showHello()方法被執行!
測試
在以上方法中輸出任意語句,然後,啓動項目,請求對應的路徑,觀察控制枱輸出:
@RequestMapping("/hello.com")public String showHello() {
    System.out.println("HelloController.showHello()");
    return null;
}
實際運行效果是:頁面會顯示錯誤:
控制枱可以看到輸出語句:
1.3.5. 顯示頁面
至此,執行流程已經完成前4步,接下來,控制器應該向DispatcherServlet返回結果:
@RequestMapping("/hello.com")public String showHello() {
    // 測試    
    System.out.println("HelloController.showHello()");
    // 返回視圖組件的名稱
    return "helloworld";
}
以上返回的字符串表示最終負責顯示的視圖組件的名稱,但是,並不表示是哪個文件!
接下來,需要配置ViewResolver,使得DispatcherServlet通過它可以知道剛才控制器返回的"helloworld"到底是哪個頁面!
實際使用的ViewResolver是InternalResourceViewResolver,需要在spring.xml進行配置:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
</bean>
InternalResourceViewResolver的工作方式是以項目的根路徑為參考(在開發時,對應的是webapp文件夾),使用前綴+視圖組件名+後綴得到視圖文件的位置,例如實際存在的jsp文件是webapp/WEB-INF/helloworld.jsp,由於它本身使用webapp作為根級,所以,前綴是/WEB-INF/,後綴是.jsp,結合控制器返回的"helloworld"進行拼接,就可以得到以上路徑,從而確定視圖組件的位置,例如配置為:
<!-- 配置視圖解析器ViewResolver -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">    
    <!-- 配置前綴 -->    
    <property name="prefix" value="/WEB-INF/" />    
    <!-- 配置後綴 -->    
    <property name="suffix" value=".jsp" />    
    <!-- 經過以上配置後, -->    
    <!-- 當前項目中的jsp文件都應該放在/WEB-INF/下 -->
</bean>
基於視圖解析器的前綴是/WEB-INF/,後綴是.jsp,結合控制器返回的"helloworld"字符串,則需要在WEB-INF文件夾下創建名為helloworld.jsp的文件完成最終的顯示:
通過瀏覽器再次訪問,實際效果應該是:
spring框架 spring框架

spring框架總結

Spring給複雜的J2EE開發帶來了春天。它的核心是輕量級的IoC容器,它的目標是為J2EE應用提供了全方位的整合框架,在Spring框架下實現多個子框架的組合,這些子框架之間可以彼此獨立,也可以使用其它的框架方案加以代替,Spring希望為企業應用提供一站式(one-stopshop)的解決方案。
參考資料