你真的瞭解Spring Framework嗎?

 

Java 框架程序員

上世紀90年代,使用Java開發Web應用廣泛使用J2EE標準,J2EE具備平臺無關性,對事務、消息等企業級的特性都有很好的支持,但當時的J2EE仍存在一些問題:web

很是複雜:EJB的誕生是爲了使Java EE的開發變得簡單,可是在當時它並無實現這個目標,完成一個組件須要配置許多的XML文件、本地接口、遠程接口等等。spring

組件依賴耦合:當一個組件依賴另外一個組件時,它必須經過名稱本身查找依賴,而名稱是寫在代碼中的,就是所謂的「硬編碼」。數據庫

重量級:不管用戶是否須要,當時像集羣、遠程調用等這些特性所有被支持,不得不去配置。這些使得程序變得很是臃腫,不靈活。express

  當時存在的這些問題就致使了市場上出現了各類各樣的Java 框架。好比如今被咱們熟知的Spring Framework。編程

Spring設計模式

早在2002年的11月份,Rod Johnson 發表了一本名爲《Expert One-on-One J2EE Design and Development》的書。這本書中就包含了Spring 框架代碼,最初這個框架叫作「Interface 21 framework」(直接取 com.interface21 包名),後來 Yann 提議命名爲 Spring(春天),寓意 :Spring表明了一個新的開始,結束了傳統J2EE開發的「寒冬」。api

Spring是一個用於Java企業開發,強大的輕量級應用開發框架。在某種程度上,Spring能夠看作是框架的框架——它能夠整合多種框架,如:Struts、Hibernate等,也就有了咱們所熟知SSH(Struts+Spring+Hibernate)。Spring採用分層架構的設計,發展至今,已經包含了20多個模塊,不一樣的模塊有着不一樣的功能,能夠選擇使用。websocket

Core Container:容器包含了spring-core,spring-beans,spring-context,spring-context-support,spring-expression這五個模塊,包含IoC、DI核心特性。架構

AOP & Instrumentation:spring-aop提供了一個面向切面編程的實現,單獨的spring-aspects模塊提供與AspectJ框架的集成。

Messaging:spring-messaging 是Spring 4中新添加的模塊,爲集成messaging api和消息協議提供支持。一樣也提供了一些映射消息到方法的註解,相似spring mvc註解。

Data Access/Integration:不難理解,爲數據訪問層提供支持,包含JDBC, ORM,OXM, JMS 和 Transaction 模塊。

Web:包含spring-web,spring-webmvc, spring-websocket,和 spring-webmvc-portlet模塊。主要爲Web開發提供支持。

Test:spring-test模塊使用JUnit或者TestNG爲Spring各個組件提供單元測試與集成測試。

IoC & DI

控制反轉(Inversion of Control,IoC)是框架(framework)的公共特性,IoC能夠認爲是一種全新的設計模式,可是理論和時間成熟相對較晚,並無包含在GoF中。IOC體現了著名的The Hollywood principle-好萊塢原則:don’t call us, we’ll call you。爲何「控制反轉」是 frameworks的特性,我在 Framework VS Library 一文中作過簡單的分析。

  實際上咱們對於IOC設計模式很熟悉,還記得《大話設計模式》中大鳥教小菜如何應對數據庫更換嗎?能夠參考個人另外一篇文章:如何應對數據庫更換(三層架構+抽象工廠+反射+配置文件)。

  傳統程序設計是在一個對象內部經過new建立它所依賴的對象,是程序員在代碼中控制對象的建立。這樣類與類之間就高度耦合了,程序變得很是不靈活,不易於複用。而有了IoC容器後,建立和查找依賴對象的控制權交到了容器手中,有容器注入依賴對象,對象與對象之間的關係變成了鬆耦合。那麼這個IoC容器不就是咱們熟悉的工廠嗎,抽象工廠+反射+配置文件就是控制反轉的一種實現。

控制反轉不等於依賴注入,他們是同一個概念不一樣角度的描述。僅僅講控制反轉,那麼究竟是哪些層面的控制被反轉了,因此使用IOC這個概念描述Spring等框架的特性就比較含糊。面向對象設計中大師級的人物Martin Fowler就此在他的 Inversion of Control Containers and the Dependency Injection pattern 博客文章中提出了依賴注入(Dependency Injection,DI)的概念。

  IoC 告訴咱們:容器控制對象,而 DI 告訴咱們:被注入對象依賴IoC容器配置依賴對象。

 

 

 

 

 

 

轉自:https://www.sohu.com/a/198201231_826634

相關文章
相關標籤/搜索