1. 程式人生 > >Spring學習(一)--Spring的設計與整體架構

Spring學習(一)--Spring的設計與整體架構

整合 prototype 數據庫操作 方案 obi 難度 struts框架 lin 設計

之前只是在學校裏大概的學習了一下Spring框架的使用以及一些最基本、淺顯的原理,並沒有做出深入的學習,等到工作之後想提升自己的時候發現所掌握的Spring框架的簡直爛如狗屎,為監督自己的學習進度,立下一個flag,一天一篇Spring框架的學習心得!!

1、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中的各種模塊提供了基礎支持。

2、Spring的目標

為程序開發者提供一個一站式、輕量級的開發平臺,這個平臺不僅可以降低代碼的開發難度、降低代碼之間的耦合度還可以與第三方中間件更好、更便捷的結合。

通過IOC容器來管理POJO對象,以及對象之間的耦合關系。

通過AOP,以動態、非侵入的方式來增強服務的功能。

IOC和AOP是Spring的核心部分,是最為底層的抽象。

3、Spring的整體結構

(1)Spring IOC

Spring的IOC中包含了最基本的IOC容器的beanFactory的接口和實現。

BeanFactory中包含三個子類,分別是ListableBeanFactory、HierarchicalBeanFactory 和AutowireCapableBeanFactory。而最終實現的類是DefaultListableBeanFactory,實現這個類即可實現所有類。

public interface BeanFactory {

//這裏是對FactoryBean的轉義定義,因為如果使用bean的名字檢索FactoryBean得到的對象是工廠生成的對象,
String FACTORY_BEAN_PREFIX = "&";

//根據Bean的名字來找到對應的實例。

Object getBean(String name) throws BeansException;

//根據bean的名字和Class類型來得到bean實例,和上面的方法不同在於它會拋出異常:如果根據名字取得的bean實例的Class類型和需要的不同的話。
Object getBean(String name, Class requiredType) throws BeansException;


//查看是否在IOC容器有這個名字的bean
boolean containsBean(String name);

//根據bean名字得到bean實例,並同時判斷這個bean是不是單件
boolean isSingleton(String name) throws NoSuchBeanDefinitionException;

//對得到bean實例的Class類型
Class getType(String name) throws NoSuchBeanDefinitionException;

//得到bean的別名,如果根據別名檢索,那麽其原名也會被檢索出來
String[] getAliases(String name);
}

Spring不僅僅只提供一個IOC容器。

 ① AnnotationConfigApplicationContext:從一個或多個基於java的配置類中加載上下文定義,適用於java註解的方式;

 ② ClassPathXmlApplicationContext:從類路徑下的一個或多個xml配置文件中加載上下文定義,適用於xml配置的方式;

 ③ FileSystemXmlApplicationContext:從文件系統下的一個或多個xml配置文件中加載上下文定義,也就是說系統盤符中加載xml配置文件;

 ④ AnnotationConfigWebApplicationContext:專門為web應用準備的,適用於註解方式;

 ⑤ XmlWebApplicationContext:從web應用下的一個或多個xml配置文件加載上下文定義,適用於xml配置方式。

(2)Spring AOP

Spring集成了AspectJ作為AOP的特定時現,同時還在JVM動態代理和CGLIB的基礎上來實現AOP框架。

JVM動態代理實現分為兩種,一種是JDK實現的動態代理和CGLIB方式,不需要強制實現接口。

AOP的最底層實現原理就是代理模式。

例如TransactionProxyFactoryBean聲明式事務處理就是一個完整的AOP代理對象,實現AOP攔截器,甚至實現所有Advice的過程。

代理模式:若是我們想使用A類時,我們不直接使用,而是通過B類來調用A類來實現我們最初要使用A類的初衷。

(3)Spring MVC

Spring MVC是為了是後端框架與前端Web模塊更好的整合在一起出現的。這個模塊以DispatcherServerlet為核心。來實現MVC模式,其中包括與Web容器的集成、Web請求的攔截、分發、處理以及ModuleAndView數據的返回,以及集成各種UI試圖展現和數據表現。

(4)Spring JDBC/ORM

在開發過程中,對關系型數據庫的操作是很重要的,使用JAVA提供的JDBC過於繁瑣,所以Spring提供Spring JDBC來處理對數據庫的操作,Spring JDBC就是對JAVA提供的JDBC的進一層封裝,使用JdbcTemplate做為模板,其中封裝了最近本的數據庫操作,例如:增加、修改、刪除、查詢等,並且還提供了RDBMS的操作對象,通過這些對象可以將數據映射到集合中,類似於一個小型的ORM操作。

Spring ROM:Spring框架封裝了許多ORM工具,例如:Hibernate、Mybatis等,還為其提供了許多模板,例如HibernateTemplate等,便於與ORM框架聯合使用。

(5)Spring 事務處理

Spring事務處理是通過SpringAOP實現的增強自身服務的模塊,在這個模塊中,Spring把事務處理的主要過程提出來,並且通過AOP的切面增強聲明式事務處理功能。

(6)Spring 遠端調用

通過Spring的端對端調用,通過Spring的封裝,隱藏了各種通信以及調用細節。

(7)Spring 應用

  1. Spring IO Platform : Spring IO是可集成的、構建現代化應用的版本平臺。Spring IO是模塊化的、企業級的分布式系統,包括一系列依賴,是的開發者僅能對自己所需的部分進行完全的部署控制。
  2. Spring Boot:Spring應用快速開發工具,用來簡化Spring應用開發過程。
  3. Spring XD:Spring XD(eXtreme Date,極限數據)是Pivotal的大數據產品。它結合了Spring Boot和Grails,組成Spring IO平臺的執行部分。
  4. Spring Data:Spring Data是為了簡化構建基於Spring框架應用的數據訪問實現,包括非關系數據庫、Map-Reduce框架、雲數據服務等;另外,也包含對關系數據庫的訪問支持。
  5. Spring Integration:Spring Integration為企業數據集成提供了各種適配器,可以通過這些適配器來轉換各種消息格式,並幫助Spring應用完成與企業應用系統的集成。
  6. Spring Batch:Spring Batch是一個輕量級的完整批處理框架,皆在幫助應用開發者構建一個健壯、高效的企業級批處理應用(這些應用的特點是不需要與用戶交互,重復的操作量大,對於大容量的批量數據處理而言,這些操作往往要求較高的可靠性)
  7. Spring Security:Spring Security是一個能夠為基於Spring的企業應用系統提供聲明式的安全訪問控制解決方案的安全框架。它提供了一組可以在Spring應用上下文配置的bean,充分利用Ioc和AOP功能,為應用系統提供聲明式的安全訪問控制功能。
  8. Spring Hateoas:Spring Hateoas是一個用戶支持實現超文本驅動的REST Web服務的開發庫,是Hateoas的實現。Hateoas(Hypermedia as the engine of application state)是REST架構風格中最復雜的約束,也是構建成熟REST服務的核心。它的重要性在於打破了客戶端和服務器之間嚴格的契約,是的客戶端可以更加智能和自適應。
  9. Spring Social:Spring Social是Spring框架的擴展,用來方便開發Web社交應用程序,可通過該項目來創建與各種社交網站的交互,如Facebook,LinkedIn、Twitter等。
  10. Spring AMQP:Spring AMQP是基於Spring框架的AMQP消息解決方案,提供模版化的發送和接收消息的抽象層,提供基於消息驅動的POJO。這個項目支持Java和.NET連個版本。Spring Source旗下的Rabbit MQ就是一個開源的基於AMQP的消息服務器。
  11. Spring for Android:Spring for Android為Android終端開發應用提供Spring的支持,它提供了一個在Android應用環境中工作、基於Java的REST客戶端。
  12. Spring Mobile:Spring Mobile是基於Spring MVC構建的,為移動端的服務器應用開發提供支持。
  13. Spring Web Flow:Spring Web Flow(SWF)一個建立在Spring MVC基礎上的Web頁面流引擎。
  14. Spring Web Service:Spring Web Service是基於Spring框架的Web服務框架,主要側重於基於文檔驅動的Web服務,提供SOAP服務開發,允許通過多種方式創建Web服務。
  15. Spring LDAP:Spring LDAP是一個用戶操作LDAP的Java框架,類似Spring JDBC提供了JdbcTemplate方式來操作數據庫。這個框架提供了一個LdapTemplate操作模版,可幫助開發人員簡化looking up、closing contexts、encoding/decoding、filters等操作。
  16. Spring Session: Spring Session致力於提供一個公共基礎設施會話,支持從任意環境中訪問一個會話,在Web環境下支持獨立於容器的集群會話,支持可插拔策略來確定Session ID,WebSocket活躍的時候可以簡單地保持HttpSession。
  17. Spring Shell: Spring Shell提供交互式的Shell,用戶可以簡單的基於Spring的編程模型來開發命令。

---------------------
作者:DoReMiFaSolLaTi
來源:CSDN
原文:https://blog.csdn.net/xxieyyuhhui/article/details/80654296
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

4、Spring的適用場景

適用於框架集合開發,例如:使用SSH框架進行程序開發,S-Struts框架:Web UI層,S-Spring框架:中間件平臺,H-Hibernate框架:ORM工具。通過Spring框架改進體系結構,可以幫助我們選擇不同的技術實現,例如將Struts替換成Spring MVC,將Hibernate替換成Mybatis等,雖然我們不會這麽無聊的去做,但是選擇Spring作為應用平臺,它給我們提供了這樣的可能性和選擇,降低了平臺鎖定的風險。

Spring學習(一)--Spring的設計與整體架構