很顯然,黑貓同學還是掛了。還是老老實實的惡補基礎吧。
一、關於Spring
Spring是一個分層的Java SE/EE應用一站式的 輕量級開源框架 。
Spring主要優點包括:
- 方便解耦,簡化開發,通過Spring提供的IoC容器,我們可以將對象之間的依賴關系交由Spring進行控制,避免硬編碼造成的程序耦合度高。
- AOP編程的支持,通過Spring提供的AOP功能,方便進行面向切面編程。
- 聲明式事務的支持,在Spring中,我們可以從單調煩悶的事務管理代碼中解脫出來,通過聲明式方式靈活地進行事務的管理,提高開發效率和質量。
- 方便程序的測試,可以用非容器依賴的編程方式進行幾乎所有的測試工作。
- 方便集成各種優秀框架,Spring提供了對各種優秀框架的直接支持。
Spring核心是 IOC 和 AOP 。
IOC
IOC(Inversion Of Controll,控制反轉)是一種設計思想,將原本在程序中手動創建對象的控制權,交由給Spring框架來管理。IOC容器是Spring用來實現IOC的載體,IOC容器實際上就是一個Map(key, value),Map中存放的是各種對象。
AOP
AOP(Aspect-Oriented Programming,面向切面編程)能夠將那些與業務無關,卻為業務模塊所共同調用的邏輯或責任(例如事務處理、日志管理、權限控制等)封裝起來,便於減少系統的重復代碼,降低模塊間的耦合度,並有利於未來的可擴展性和可維護性。使用AOP之后我們可以把一些通用功能抽象出來,在需要用到的地方直接使用即可,這樣可以大大簡化代碼量,提高了系統的擴展性。
Spring AOP / AspectJ AOP 的區別?
Spring AOP屬於運行時增強,而AspectJ是編譯時增強。
Spring AOP基於代理(Proxying),而AspectJ基於字節碼操作(Bytecode Manipulation)。
AspectJ相比於Spring AOP功能更加強大,但是Spring AOP相對來說更簡單。如果切面比較少,那么兩者性能差異不大。但是,當切面太多的話,最好選擇AspectJ,它比SpringAOP快很多。
二、Spring體系結構
如下圖所示,整個spring框架按其所屬功能可以划分為五個主要模塊,這五個模塊幾乎為企業應用提供了所需的一切,從持久層、業務層到表現層都擁有相應的支持,這就是為什么稱Spring是一站式框架的原因。
1、核心模塊(Core Container)
Spring的核心模塊實現了IoC的功能,它將類和類之間的依賴從代碼中脫離出來,用配置的方式進行依賴關系描述。由IoC容器負責類的創建,管理,獲取等。BeanFactory接口是Spring框架的核心接口,實現了容器很多核心的功能。
Context模塊構建於核心模塊之上,擴展了BeanFactory的功能,包括國際化,資源加載,郵件服務,任務調度等多項功能。ApplicationContext是Context模塊的核心接口。
表達式語言(Expression Language)是統一表達式語言(EL)的一個擴展,支持設置和獲取對象屬性,調用對象方法,操作數組、集合等。使用它可以很方便的通過表達式和Spring IoC容器進行交互。
2、AOP模塊
Spring AOP模塊提供了滿足AOP Alliance規范的實現,還整合了AspectJ這種AOP語言級的框架。通過AOP能降低耦合。
3、數據訪問集成模塊(Data Access/Integration )
該模塊包括了JDBC、ORM、OXM、JMS和事務管理:
- 事務模塊:該模塊用於Spring管理事務,只要是Spring管理對象都能得到Spring管理事務的好處,無需在代碼中進行事務控制了,而且支持編程和聲明性的事務管理。
- JDBC模塊:提供了一個JBDC的樣例模板,使用這些模板能消除傳統冗長的JDBC編碼還有必須的事務控制,而且能享受到Spring管理事務的好處。
- ORM模塊:提供與流行的“對象-關系”映射框架的無縫集成,包括hibernate、JPA、MyBatis等。而且可以使用Spring事務管理,無需額外控制事務。
- OXM模塊:提供了一個對Object/XML映射實現,將Java對象映射成XML數據,或者將XML數據映射成java對象,Object/XML映射實現包括JAXB、Castor、XMLBeans和XStream。
- JMS模塊:用於JMS(Java Messaging Service),提供一套“消息生產者、消息消費者”模板用於更加簡單的使用JMS,JMS用於在兩個應用程序之間,或分布式系統中發送消息,進行異步通信。
4、Web模塊
該模塊建立在ApplicationContext模塊之上,提供了Web應用的功能,如文件上傳、FreeMarker等。Spring可以整合Struts2等MVC框架。此外,Spring自己提供了MVC框架Spring MVC。
5、測試模塊
Spring可以用非容器依賴的編程方式進行幾乎所有的測試工作,支持JUnit和TestNG等測試框架。
最后
看完本次分享的內容,你是否對Spring有了一個更深層次的認識了呢?
需要更多面試資源的小伙伴,可以關注我的公眾號【Java技術zhai】獲取。
如果有哪位有緣的朋友看到了這篇文章,恰好有對本次Spring分享的內容補充 ,歡迎留言交流。

