去阿里面試,被一道 Spring 面試題難倒了


 

很顯然,黑貓同學還是掛了。還是老老實實的惡補基礎吧。

一、關於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分享的內容補充 ,歡迎留言交流。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM