Spring常見面試題總結

學習Java Web不可避免地要學習Spring。那麼什麼是Spring呢? Spring是一個開源的輕量級的Java開發框架,主要是爲了簡化開發和提升可維護性。
今天總結一下面試中有關Spring的面試題,若有不當請多指教!java

  • 列舉一些重要的Spring模塊
  • 談談Spring IOC
  • 談談Spring AOP
  • Spring中的bean的做用域有哪些?
  • @Component和@Bean的區別是什麼?
  • 說說本身對於Spring MVC瞭解?
  • 談談SpringMVC工做原理
  • Spring框架中用到了哪些設計模式?

列舉一些重要的Spring模塊

下圖對應的是 Spring4.x 版本git

1.png

  • Spring Core:基礎,能夠說 Spring 其餘全部的功能都須要依賴於該類庫。主要提供IOC依賴注入功能。
  • Spring Aspects: 該模塊爲與AspectJ的集成提供支持。
  • Spring AOP:提供了面向切面的編程實現。
  • Spring JDBC: Java數據庫鏈接。
  • Spring JMS:Java消息服務。
  • Spring ORM: 用於支持Hibernate等ORM工具。
  • Spring Web: 爲建立Web應用程序提供支持。
  • Spring Test: 提供了對 JUnit 和 TestNG 測試的支持。

談談Spring IOC

IOC(Inverse of Control:控制反轉)是一種設計思想,就是將本來在程序中手動建立對象的控制權,交由Spring框架來管理。 IOC容器實際上就是個Map(key,value),Map 中存放的是各類對象。

將對象之間的相互依賴關係交給 IOC 容器來管理,並由 IOC 容器完成對象的注入。這樣能夠很大程度上簡化應用的開發,把應用從複雜的依賴關係中解放出來。 IOC 容器就像是一個工廠同樣,當咱們須要建立一個對象的時候,只須要配置好配置文件/註解便可,徹底不用考慮對象是如何被建立出來的。github

IOC源碼解析:IOC源碼解析面試

談談Spring AOP

AOP(Aspect-Oriented Programming:面向切面編程)可以將那些與業務無關,卻爲業務模塊所共同調用的邏輯或責任(例如事務處理、日誌管理、權限控制等)封裝起來,便於減小系統的重複代碼,下降模塊間的耦合度,並有利於將來的可拓展性和可維護性。

Spring AOP就是基於動態代理的,若是要代理的對象,實現了某個接口,那麼Spring AOP會使用JDK Proxy,去建立代理對象,而對於沒有實現接口的對象,就沒法使用 JDK Proxy 去進行代理了,這時候Spring AOP會使用Cglibspring

Spring中的bean的做用域有哪些?

  • singleton : 惟一 bean 實例,Spring 中的 bean 默認都是單例的。
  • prototype : 每次請求都會建立一個新的 bean 實例。
  • request : 每一次HTTP請求都會產生一個新的bean,該bean僅在當前HTTP request內有效。
  • session : 每一次HTTP請求都會產生一個新的 bean,該bean僅在當前 HTTP session 內有效。
  • global-session: 該屬性僅用於HTTP Session,同session做用域不一樣的是,全部的Session共享一個Bean實例。

@Component和@Bean的區別是什麼

@Component 註解做用於類,而@Bean註解做用於方法。數據庫

@Component一般是經過類路徑掃描來自動偵測以及自動裝配到Spring容器中。@Bean註解一般是咱們在標有該註解的方法中定義產生這個 bean,@Bean告訴了Spring這是某個類的示例,當我須要用它的時候還給我。編程

說說本身對於Spring MVC瞭解?

MVC 是一種設計模式,Spring MVC 是一款很優秀的 MVC 框架。Spring MVC 能夠幫助咱們進行更簡潔的Web層的開發,而且它天生與 Spring 框架集成。
Spring MVC 下咱們通常把後端項目分爲 Service層(處理業務)、Dao層(數據庫操做)、Entity層(實體類)、Controller層(控制層,返回數據給前臺頁面)。後端

談談SpringMVC工做原理(重點)

原理以下圖所示:設計模式

2.jpg

流程說明(重要):瀏覽器

  1. 客戶端(瀏覽器)發送請求,直接請求到DispatcherServlet
  2. DispatcherServlet根據請求信息調用HandlerMapping,解析請求對應的Handler
  3. 解析到對應的Handler(也就是咱們日常說的Controller控制器)後,開始由HandlerAdapter適配器處理。
  4. HandlerAdapter會根據Handler來調用真正的處理器開處理請求,並處理相應的業務邏輯。
  5. 處理器處理完業務後,會返回一個ModelAndView對象,Model是返回的數據對象,View是個邏輯上的View
  6. ViewResolver會根據邏輯View查找實際的View
  7. DispaterServlet把返回的Model傳給View(視圖渲染)。
  8. View返回給請求者(瀏覽器)

Spring框架中用到了哪些設計模式?

源碼解析:Spring設計模式源碼解析

  • 工廠模式: Spring使用工廠模式經過BeanFactoryApplicationContext建立 bean 對象。
  • 代理模式: Spring AOP 功能的實現。
  • 單例模式: Spring 中的 Bean 默認都是單例的。
  • 模板方法模式: Spring 中jdbcTemplatehibernateTemplate等以 Template 結尾的對數據庫操做的類,它們就使用到了模板模式。
  • 裝飾器模式: 咱們的項目須要鏈接多個數據庫,並且不一樣的客戶在每次訪問中根據須要會去訪問不一樣的數據庫。這種模式讓咱們能夠根據客戶的需求可以動態切換不一樣的數據源。
  • 觀察者模式:Spring 事件驅動模型就是觀察者模式很經典的一個應用。
  • 適配器模式:Spring AOP 的加強或通知(Advice)使用到了適配器模式、spring MVC 中也是用到了適配器模式適配Controller
  • ......

參考

Spring面試總結

相關文章
相關標籤/搜索