導航:首頁 > 編程語言 > spring分布式事件驅動編程

spring分布式事件驅動編程

發布時間:2023-01-12 09:08:01

1. spring是做什麼的怎麼用

spring的作用

Spring是一個開源的輕量級的應用程序開發框架,其目的是簡化企業的應用程序開發,降低侵入性,Spring提供的IOC和AOP功能,可以將組件之間的耦合度降到最低,便於後期的維護和升級,實現了軟體的高內聚低耦合思想。

我們使用Spring框架開發的時候不僅可以使用Spring本身提供的功能外,還可以使用第三方框架和技術來整合應用,可以自由的選擇採用哪種技術去開發。

2. SpringBoot核心原理:自動配置、事件驅動、Condition

SpringBoot是Spring的包裝,通過自動配置使得SpringBoot可以做到開箱即用,上手成本非常低,但是學習其實現原理的成本大大增加,需要先了解熟悉Spring原理。

如果還不清楚Spring原理的,可以先查看博主之前的文章,本篇主要分析SpringBoot的啟動、自動配置、Condition、事件驅動原理。

SpringBoot啟動非常簡單,因其內置了Tomcat,所以只需要通過下面幾種方式啟動即可:

可以看到第一種是最簡單的,也是最常用的方式,需要注意類上面需要標注 @SpringBootApplication 註解,這是自動配置的核心實現,稍後分析,先來看看SpringBoot啟動做了些什麼?

在往下之前,不妨先猜測一下,run方法中需要做什麼?對比Spring源碼,我們知道,Spring的啟動都會創建一個 ApplicationContext 的應用上下文對象,並調用其refresh方法啟動容器,SpringBoot只是Spring的一層殼,肯定也避免不了這樣的操作。

另一方面,以前通過Spring搭建的項目,都需要打成War包發布到Tomcat才行,而現在SpringBoot已經內置了Tomcat,只需要打成Jar包啟動即可,所以在run方法中肯定也會創建對應的Tomcat對象並啟動。以上只是我們的猜想,下面就來驗證,進入run方法:

SpringBoot的啟動流程就是這個方法,先看 getRunListeners 方法,這個方法就是去拿到所有的 SpringApplicationRunListener 實現類,這些類是用於SpringBoot事件發布的,關於事件驅動稍後分析,這里主要看這個方法的實現原理:

一步步追蹤下去可以看到最終就是通過SPI機制根據介面類型從 META-INF/spring.factories 文件中載入對應的實現類並實例化,SpringBoot的自動配置也是這樣實現的。

為什麼要這樣做呢?通過註解掃描不可以么?當然不行,這些類都在第三方jar包中,註解掃描實現是很麻煩的,當然你也可以通過 @Import 註解導入,但是這種方式不適合擴展類特別多的情況,所以這里採用SPI的優點就顯而易見了。

回到run方法中,可以看到調用了 createApplicationContext 方法,見名知意,這個就是去創建應用上下文對象:

注意這里通過反射實例化了一個新的沒見過的上下文對象 ,這個是SpringBoot擴展的,看看其構造方法:

如果你有看過Spring註解驅動的實現原理,這兩個對象肯定不會陌生,一個實支持註解解析的,另外一個是掃描包用的。

上下文創建好了,下一步自然就是調用refresh方法啟動容器:

這里首先會調用到其父類中 :

可以看到是直接委託給了父類:

這個方法不會陌生吧,之前已經分析過了,這里不再贅述,至此SpringBoot的容器就啟動了,但是Tomcat啟動是在哪裡呢?run方法中也沒有看到。

實際上Tomcat的啟動也是在refresh流程中,這個方法其中一步是調用了onRefresh方法,在Spring中這是一個沒有實現的模板方法,而SpringBoot就通過這個方法完成了Tomcat的啟動:

這里首先拿到 TomcatServletWebServerFactory 對象,通過該對象再去創建和啟動Tomcat:

上面的每一步都可以對比Tomcat的配置文件,需要注意默認只支持了http協議:

如果想要擴展的話則可以對 additionalTomcatConnectors 屬性設置值,需要注意這個屬性沒有對應的setter方法,只有 addAdditionalTomcatConnectors 方法,也就是說我們只能通過實現 BeanFactoryPostProcessor 介面的 postProcessBeanFactory 方法,而不能通過 的 方法,因為前者可以通過傳入的BeanFactory對象提前獲取到 TomcatServletWebServerFactory 對象調用 addAdditionalTomcatConnectors 即可;而後者只能拿到BeanDefinition對象,該對象只能通過setter方法設置值。

這段代碼會在控制台列印所有的事件名稱,按照順序如下:

以上是正常啟動關閉,如果發生異常還有發布 ApplicationFailedEvent 事件。事件的發布遍布在整個容器的啟動關閉周期中,事件發布對象剛剛我們也看到了是通過SPI載入的 SpringApplicationRunListener 實現類 EventPublishingRunListener ,同樣事件監聽器也是在 spring.factories 文件中配置的,默認實現了以下監聽器:

可以看到有用於文件編碼的( ),有載入日誌框架的( LoggingApplicationListener ),還有載入配置的( ConfigFileApplicationListener )等等一系列監聽器,SpringBoot也就是通過這系列監聽器將必要的配置和組件載入到容器中來,這里不再詳細分析,感興趣的讀者可以通過其實現的 onApplicationEvent 方法看到每個監聽器究竟是監聽的哪一個事件,當然事件發布和監聽我們自己也是可以擴展的。

SpringBoot最核心的還是自動配置,為什麼它能做到開箱即用,不再需要我們手動使用 @EnableXXX 等註解來開啟?這一切的答案就在 @SpringBootApplication 註解中:

這里重要的註解有三個: @SpringBootConfiguration 、 @EnableAutoConfiguration 、 @ComponentScan 。 @ComponentScan 就不用再說了, @SpringBootConfiguration 等同於 @Configuration ,而 @EnableAutoConfiguration 就是開啟自動配置:

@AutoConfigurationPackage 註解的作用就是將該註解所標記類所在的包作為自動配置的包,簡單看看就行,主要看 ,這個就是實現自動配置的核心類,注意這個類是實現的 DeferredImportSelector 介面。

在這個類中有一個 selectImports 方法。這個方法在我之前的文章這一次搞懂Spring事務註解的解析也有分析過,只是實現類不同,它同樣會被 類調用,先來看這個方法做了些什麼:

追蹤源碼最終可以看到也是從 META-INF/spring.factories 文件中拿到所有 EnableAutoConfiguration 對應的值(在 spring-boot-autoconfigure 中)並通過反射實例化,過濾後包裝成 AutoConfigurationEntry 對象返回。

看到這里你應該會覺得自動配置的實現就是通過這個 selectImports 方法,但實際上這個方法通常並不會被調用到,而是會調用該類的內部類 AutoConfigurationGroup 的process和selectImports方法,前者同樣是通過 getAutoConfigurationEntry 拿到所有的自動配置類,而後者這是過濾排序並包裝後返回。

下面就來分析 是怎麼調用到這里的,直接進入 processConfigBeanDefinitions 方法:

前面一大段主要是拿到合格的 Configuration 配置類,主要邏輯是在 ConfigurationClassParser.parse 方法中,該方法完成了對 @Component 、 @Bean 、 @Import 、 @ComponentScans 等註解的解析,這里主要看對 @Import 的解析,其它的讀者可自行分析。一步步追蹤,最終會進入到 processConfigurationClass 方法:

這里需要注意 this.conditionEvaluator.shouldSkip 方法的調用,這個方法就是進行Bean載入過濾的,即根據 @Condition 註解的匹配值判斷是否載入該Bean,具體實現稍後分析,繼續跟蹤主流程 doProcessConfigurationClass :

這里就是完成對一系列註解的支撐,我省略掉了,主要看 processImports 方法,這個方法就是處理 @Import 註解的:

剛剛我提醒過 是實現 DeferredImportSelector 介面的,如果不是該介面的實現類則是直接調用 selectImports 方法,反之則是調用 DeferredImportSelectorHandler.handle 方法:

首先創建了一個 DeferredImportSelectorHolder 對象,如果是第一次執行則是添加到 deferredImportSelectors 屬性中,等到 ConfigurationClassParser.parse 的最後調用process方法:

反之則是直接執行,首先通過register拿到 AutoConfigurationGroup 對象:

然後在 processGroupImports 方法中進行真正的處理:

在 getImports 方法中就完成了對process和 selectImports 方法的調用,拿到自動配置類後再遞歸調用調用 processImports 方法完成對自動配置類的載入。至此,自動配置的載入過程就分析完了,下面是時序圖:

在自動配置類中有很多Condition相關的註解,以AOP為例:

這里就能看到 @ConditionalOnProperty 、 @ConditionalOnClass 、 @ConditionalOnMissingClass ,另外還有 @ConditionalOnBean 、 @ConditionalOnMissingBean 等等很多條件匹配註解。

這些註解表示條件匹配才會載入該Bean,以 @ConditionalOnProperty 為例,表明配置文件中符合條件才會載入對應的Bean,prefix表示在配置文件中的前綴,name表示配置的名稱, havingValue 表示配置為該值時才匹配, matchIfMissing 則是表示沒有該配置是否默認載入對應的Bean。其它註解可類比理解記憶,下面主要來分析該註解的實現原理。

這里註解點進去看會發現每個註解上都標注了 @Conditional 註解,並且value值都對應一個類,比如 OnBeanCondition ,而這些類都實現了 Condition 介面,看看其繼承體系:

上面只展示了幾個實現類,但實際上Condition的實現類是非常多的,我們還可以自己實現該介面來擴展 @Condition 註解。Condition介面中有一個matches方法,這個方法返回true則表示匹配。該方法在 ConfigurationClassParser 中多處都有調用,也就是剛剛我提醒過的shouldSkip方法,具體實現是在 ConditionEvaluator 類中:

再來看看matches的實現,但 OnBeanCondition 類中沒有實現該方法,而是在其父類 SpringBootCondition 中:

getMatchOutcome 方法也是一個模板方法,具體的匹配邏輯就在這個方法中實現,該方法返回的 ConditionOutcome 對象就包含了是否匹配和日誌消息兩個欄位。進入到 OnBeanCondition 類中:

可以看到該類支持了 @ConditionalOnBean 、 @ConditionalOnSingleCandidate 、 @ConditionalOnMissingBean 註解,主要的匹配邏輯在 getMatchingBeans 方法中:

這里邏輯看起來比較復雜,但實際上就做了兩件事,首先通過 getNamesOfBeansIgnoredByType 方法調用 beanFactory.getBeanNamesForType 拿到容器中對應的Bean實例,然後根據返回的結果判斷哪些Bean存在,哪些Bean不存在(Condition註解中是可以配置多個值的)並返回MatchResult對象,而MatchResult中只要有一個Bean沒有匹配上就返回false,也就決定了當前Bean是否需要實例化。

本篇分析了SpringBoot核心原理的實現,通過本篇相信讀者也將能更加熟練地使用和擴展SpringBoot。

另外還有一些常用的組件我沒有展開分析,如事務、MVC、監聽器的自動配置,這些我們有了Spring源碼基礎的話下來看一下就明白了,這里就不贅述了。

最後讀者可以思考一下我們應該如何自定義starter啟動器,相信看完本篇應該難不倒你。

3. 什麼是spring

1.1.1 Spring是什麼

Spring是一個開源的輕量級java SE(Java 標准版本)/Java EE(Java
企業版本)開發應用框架,其目的是用於簡化企業級應用程序開發。應用程序是由一組相互協作的對象組成。而在傳統應用程序開發中,一個完整的應用是由一組相互協作的對象組成。所以開發一個應用除了要開發業務邏輯之外,最多的是關注如何使這些對象協作來完成所需功能,而且要低耦合、高內聚。業務邏輯開發是不可避免的,那如果有個框架出來幫我們來創建對象及管理這些對象之間的依賴關系。可能有人說了,比如「抽象工廠、工廠方法設計模式」不也可以幫我們創建對象,「生成器模式」幫我們處理對象間的依賴關系,不也能完成這些功能嗎?可是這些又需要我們創建另一些工廠類、生成器類,我們又要而外管理這些類,增加了我們的負擔,如果能有種通過配置方式來創建對象,管理對象之間依賴關系,我們不需要通過工廠和生成器來創建及管理對象之間的依賴關系,這樣我們是不是減少了許多工作,加速了開發,能節省出很多時間來干其他事。Spring框架剛出來時主要就是來完成這個功能。

Spring框架除了幫我們管理對象及其依賴關系,還提供像通用日誌記錄、性能統計、安全控制、異常處理等面向切面的能力,還能幫我管理最頭疼的資料庫事務,本身提供了一套簡單的JDBC訪問實現,提供與第三方數據訪問框架集成(如Hibernate、JPA),與各種Java
EE技術整合(如Java Mail、任務調度等等),提供一套自己的web層框架Spring
MVC、而且還能非常簡單的與第三方web框架集成。從這里我們可以認為Spring是一個超級粘合平台,除了自己提供功能外,還提供粘合其他技術和框架的能力,從而使我們可以更自由的選擇到底使用什麼技術進行開發。而且不管是JAVA
SE(C/S架構)應用程序還是JAVA EE(B/S架構)應用程序都可以使用這個平台進行開發。讓我們來深入看一下Spring到底能幫我們做些什麼?

1.1.2 Spring能幫我們做什麼

Spring除了不能幫我們寫業務邏輯,其餘的幾乎什麼都能幫助我們簡化開發:

一、傳統程序開發,創建對象及組裝對象間依賴關系由我們在程序內部進行控制,這樣會加大各個對象間的耦合,如果我們要修改對象間的依賴關系就必須修改源代碼,重新編譯、部署;而如果採用Spring,則由Spring根據配置文件來進行創建及組裝對象間依賴關系,只需要改配置文件即可,無需重新編譯。所以,Spring能幫我們根據配置文件創建及組裝對象之間的依賴關系。

二、當我們要進行一些日誌記錄、許可權控制、性能統計等時,在傳統應用程序當中我們可能在需要的對象或方法中進行,而且比如許可權控制、性能統計大部分是重復的,這樣代碼中就存在大量重復代碼,即使有人說我把通用部分提取出來,那必然存在調用還是存在重復,像性能統計我們可能只是在必要時才進行,在診斷完畢後要刪除這些代碼;還有日誌記錄,比如記錄一些方法訪問日誌、數據訪問日誌等等,這些都會滲透到各個要訪問方法中;還有許可權控制,必須在方法執行開始進行審核,想想這些是多麼可怕而且是多麼無聊的工作。如果採用Spring,這些日誌記錄、許可權控制、性能統計從業務邏輯中分離出來,通過Spring支持的面向切面編程,在需要這些功能的地方動態添加這些功能,無需滲透到各個需要的方法或對象中;有人可能說了,我們可以使用「代理設計模式」或「包裝器設計模式」,你可以使用這些,但還是需要通過編程方式來創建代理對象,還是要耦合這些代理對象,而採用Spring
面向切面編程能提供一種更好的方式來完成上述功能,一般通過配置方式,而且不需要在現有代碼中添加任何額外代碼,現有代碼專注業務邏輯。所以,Spring
面向切面編程能幫助我們無耦合的實現日誌記錄,性能統計,安全控制。

三、在傳統應用程序當中,我們如何來完成資料庫事務管理?需要一系列「獲取連接,執行SQL,提交或回滾事務,關閉連接」,而且還要保證在最後一定要關閉連接,多麼可怕的事情,而且也很無聊;如果採用Spring,我們只需獲取連接,執行SQL,其他的都交給Spring來管理了,簡單吧。所以,Spring能非常簡單的幫我們管理資料庫事務。

四、Spring還提供了與第三方數據訪問框架(如Hibernate、JPA)無縫集成,而且自己也提供了一套JDBC訪問模板,來方便資料庫訪問。

五、Spring還提供與第三方Web(如Struts、JSF)框架無縫集成,而且自己也提供了一套Spring MVC框架,來方便web層搭建。

六、Spring能方便的與Java EE(如Java Mail、任務調度)整合,與更多技術整合(比如緩存框架)。

Spring能幫我們做這么多事情,提供這么多功能和與那麼多主流技術整合,而且是幫我們做了開發中比較頭疼和困難的事情,那可能有人會問,難道只有Spring這一個框架,沒有其他選擇?當然有,比如EJB需要依賴應用伺服器、開發效率低、在開發中小型項目是宰雞拿牛刀,雖然發展到現在EJB比較好用了,但還是比較笨重還需要依賴應用伺服器等。那為何需要使用Spring,而不是其他框架呢?讓我們接著往下看。

1.1.3 為何需要Spring

一 首先闡述幾個概念

1、應用程序:是能完成我們所需要功能的成品,比如購物網站、OA系統。

2、框架:是能完成一定功能的半成品,比如我們可以使用框架進行購物網站開發;框架做一部分功能,我們自己做一部分功能,這樣應用程序就創建出來了。而且框架規定了你在開發應用程序時的整體架構,提供了一些基礎功能,還規定了類和對象的如何創建、如何協作等,從而簡化我們開發,讓我們專注於業務邏輯開發。

3、非侵入式設計:從框架角度可以這樣理解,無需繼承框架提供的類,這種設計就可以看作是非侵入式設計,如果繼承了這些框架類,就是侵入設計,如果以後想更換框架之前寫過的代碼幾乎無法重用,如果非侵入式設計則之前寫過的代碼仍然可以繼續使用。

4、輕量級及重量級:輕量級是相對於重量級而言的,輕量級一般就是非入侵性的、所依賴的東西非常少、資源佔用非常少、部署簡單等等,其實就是比較容易使用,而重量級正好相反。

5、POJO:POJO(Plain Old Java
Objects)簡單的Java對象,它可以包含業務邏輯或持久化邏輯,但不擔當任何特殊角色且不繼承或不實現任何其它Java框架的類或介面。

6、容器:在日常生活中容器就是一種盛放東西的器具,從程序設計角度看就是裝對象的的對象,因為存在放入、拿出等操作,所以容器還要管理對象的生命周期。

7、控制反轉:即Inversion of Control,縮寫為IoC,控制反轉還有一個名字叫做依賴注入(Dependency
Injection),就是由容器控製程序之間的關系,而非傳統實現中,由程序代碼直接操控。

8、Bean:一般指容器管理對象,在Spring中指Spring IoC容器管理對象。


為什麼需要Spring及Spring的優點


非常輕量級的容器:以集中的、自動化的方式進行應用程序對象創建和裝配,負責對象創建和裝配,管理對象生命周期,能組合成復雜的應用程序。Spring容器是非侵入式的(不需要依賴任何Spring特定類),而且完全採用POJOs進行開發,使應用程序更容易測試、更容易管理。而且核心JAR包非常小,Spring3.0.5不到1M,而且不需要依賴任何應用伺服器,可以部署在任何環境(Java
SE或Java EE)。

● AOP:AOP是Aspect Oriented
Programming的縮寫,意思是面向切面編程,提供從另一個角度來考慮程序結構以完善面向對象編程(相對於OOP),即可以通過在編譯期間、裝載期間或運行期間實現在不修改源代碼的情況下給程序動態添加功能的一種技術。通俗點說就是把可重用的功能提取出來,然後將這些通用功能在合適的時候織入到應用程序中;比如安全,日記記錄,這些都是通用的功能,我們可以把它們提取出來,然後在程序執行的合適地方織入這些代碼並執行它們,從而完成需要的功能並復用了這些功能。


簡單的資料庫事務管理:在使用資料庫的應用程序當中,自己管理資料庫事務是一項很讓人頭疼的事,而且很容易出現錯誤,Spring支持可插入的事務管理支持,而且無需JEE環境支持,通過Spring管理事務可以把我們從事務管理中解放出來來專注業務邏輯。


JDBC抽象及ORM框架支持:Spring使JDBC更加容易使用;提供DAO(數據訪問對象)支持,非常方便集成第三方ORM框架,比如Hibernate等;並且完全支持Spring事務和使用Spring提供的一致的異常體系。

● 靈活的Web層支持:Spring本身提供一套非常強大的MVC框架,而且可以非常容易的與第三方MVC框架集成,比如Struts等。

● 簡化各種技術集成:提供對Java Mail、任務調度、JMX、JMS、JNDI、EJB、動態語言、遠程訪問、Web Service等的集成。

Spring能幫助我們簡化應用程序開發,幫助我們創建和組裝對象,為我們管理事務,簡單的MVC框架,可以把Spring看作是一個超級粘合平台,能把很多技術整合在一起,形成一個整體,使系統結構更優良、性能更出眾,從而加速我們程序開發,有如上優點,我們沒有理由不考慮使用它。

1.1.4 如何學好Spring

要學好Spring,首先要明確Spring是個什麼東西,能幫我們做些什麼事情,知道了這些然後做個簡單的例子,這樣就基本知道怎麼使用Spring了。Spring核心是IoC容器,所以一定要透徹理解什麼是IoC容器,以及如何配置及使用容器,其他所有技術都是基於容器實現的;理解好IoC後,接下來是面向切面編程,首先還是明確概念,基本配置,最後是實現原理,接下來就是資料庫事務管理,其實Spring管理事務是通過面向切面編程實現的,所以基礎很重要,IoC容器和面向切面編程搞定後,其餘都是基於這倆東西的實現,學起來就更加輕鬆了。要學好Spring不能急,一定要把基礎打牢,基礎牢固了,這就是磨刀不誤砍柴工。

1.2 Spring基礎

1.2.1 Spring架構圖

圖 1-1 Spring架構圖

核心容器:包括Core、Beans、Context、EL模塊。


Core模塊:封裝了框架依賴的最底層部分,包括資源訪問、類型轉換及一些常用工具類。


Beans模塊:提供了框架的基礎部分,包括反轉控制和依賴注入。其中Bean
Factory是容器核心,本質是「工廠設計模式」的實現,而且無需編程實現「單例設計模式」,單例完全由容器控制,而且提倡面向介面編程,而非面向實現編程;所有應用程序對象及對象間關系由框架管理,從而真正把你從程序邏輯中把維護對象之間的依賴關系提取出來,所有這些依賴關系都由BeanFactory來維護。

● Context模塊:以Core和Beans為基礎,集成Beans模塊功能並添加資源綁定、數據驗證、國際化、Java
EE支持、容器生命周期、事件傳播等;核心介面是ApplicationContext。


EL模塊:提供強大的表達式語言支持,支持訪問和修改屬性值,方法調用,支持訪問及修改數組、容器和索引器,命名變數,支持算數和邏輯運算,支持從Spring
容器獲取Bean,它也支持列表投影、選擇和一般的列表聚合等。

AOP、Aspects模塊:

● AOP模塊:Spring
AOP模塊提供了符合 AOP Alliance規范的面向方面的編程(aspect-oriented
programming)實現,提供比如日誌記錄、許可權控制、性能統計等通用功能和業務邏輯分離的技術,並且能動態的把這些功能添加到需要的代碼中;這樣各專其職,降低業務邏輯和通用功能的耦合。

● Aspects模塊:提供了對AspectJ的集成,AspectJ提供了比Spring ASP更強大的功能。

數據訪問/集成模塊:該模塊包括了JDBC、ORM、OXM、JMS和事務管理。


事務模塊:該模塊用於Spring管理事務,只要是Spring管理對象都能得到Spring管理事務的好處,無需在代碼中進行事務控制了,而且支持編程和聲明性的事物管理。


JDBC模塊:提供了一個JBDC的樣例模板,使用這些模板能消除傳統冗長的JDBC編碼還有必須的事務控制,而且能享受到Spring管理事務的好處。


ORM模塊:提供與流行的「對象-關系」映射框架的無縫集成,包括Hibernate、JPA、Ibatiss等。而且可以使用Spring事務管理,無需額外控制事務。


OXM模塊:提供了一個對Object/XML映射實現,將java對象映射成XML數據,或者將XML數據映射成java對象,Object/XML映射實現包括JAXB、Castor、XMLBeans和XStream。

● JMS模塊:用於JMS(Java Messaging Service),提供一套
「消息生產者、消息消費者」模板用於更加簡單的使用JMS,JMS用於用於在兩個應用程序之間,或分布式系統中發送消息,進行非同步通信。


Web/Remoting模塊:Web/Remoting模塊包含了Web、Web-Servlet、Web-Struts、Web-Porlet模塊。

● Web模塊:提供了基礎的web功能。例如多文件上傳、集成IoC容器、遠程過程訪問(RMI、Hessian、Burlap)以及Web
Service支持,並提供一個RestTemplate類來提供方便的Restful services訪問。


Web-Servlet模塊:提供了一個Spring MVC Web框架實現。Spring
MVC框架提供了基於註解的請求資源注入、更簡單的數據綁定、數據驗證等及一套非常易用的JSP標簽,完全無縫與Spring其他技術協作。


Web-Struts模塊:提供了與Struts無縫集成,Struts1.x 和Struts2.x都支持

Test模塊:
Spring支持Junit和TestNG測試框架,而且還額外提供了一些基於Spring的測試功能,比如在測試Web框架時,模擬Http請求的功能。

1.2.2 典型應用場景

Spring可以應用到許多場景,從最簡單的標准Java
SE程序到企業級應用程序都能使用Spring來構建。以下介紹幾個比較流行的應用場景:

● 典型Web應用程序應用場景:

圖1-2 web應用程序應用場景

在Web應用程序應用場景中,典型的三層架構:數據模型層實現域對象;數據訪問層實現數據訪問;邏輯層實現業務邏輯;web層提供頁面展示;所有這些層組件都由Spring進行管理,享受到Spring事務管理、AOP等好處,而且請求唯一入口就是DispachterServlet,它通過把請求映射為相應web層組件來實現相應請求功能。

● 遠程訪問應用場景:

Spring能非常方便的提供暴露RMI服務,遠程訪問服務如Hessian、Burlap等,實現非常簡單只需通過在Spring中配置相應的地址及需要暴露的服務即可輕松實現,後邊會有介紹;

● EJB應用場景:

Spring也可以與EJB輕松集成,後邊會詳細介紹。

4. spring是什麼意思

spring的意思是:春天。

讀音:英[sprɪŋ],美[sprɪŋ]。

釋義:

n.春天;彈簧;泉水;活力;跳躍。

adj.春天的。

vi.生長;湧出;躍出;裂開。

vt.使跳起;使爆炸;突然提出;使彈開。

變形:過去式sprang或sprung,過去分詞sprung,現在分詞springing,第三人稱單數springs,復數springs。

短語:

mineral spring礦泉。

air spring氣墊。

spring break春假。

spring的用法

spring可作「跳」「跳躍」解,引申可指「彈簧,發條」「泉水」,是可數名詞。

spring跟帶有延續性的介詞(如ring,throughout)時,前面要加定冠詞the。

spring既可用作及物動詞,也可用作不及物動詞。用作及物動詞時,接名詞、代詞作賓語,有時可接由形容詞充當補足語的復合賓語。

spring前可帶介詞in,ring等,如in spring,in the spring,ring the spring(the不可省略)。當表示某個季節來臨時,不帶the,如Spring has come。

閱讀全文

與spring分布式事件驅動編程相關的資料

熱點內容
投訴聯通用什麼app 瀏覽:150
web伺服器變更ip地址 瀏覽:954
java正則表達式驗證郵箱 瀏覽:360
成熟商務男裝下載什麼軟體app 瀏覽:609
加密2h代表長度是多少厘米 瀏覽:23
拍賣程序員 瀏覽:101
電腦的圖片放在哪個文件夾 瀏覽:274
unsignedintjava 瀏覽:216
編譯器下載地址 瀏覽:42
什麼是面對對象編程 瀏覽:708
b站伺服器什麼時候恢復 瀏覽:721
6p相當於安卓機什麼水準 瀏覽:498
能否給隱藏相冊加密 瀏覽:596
糖心app改什麼名 瀏覽:823
戰地1控伺服器如何部署 瀏覽:395
xp還原系統輸入命令 瀏覽:324
mysql命令行版本 瀏覽:305
如何進入itunes找文件夾 瀏覽:834
CAD中重復命令使用 瀏覽:479
心智pdf 瀏覽:477