學習Java Web不可避免地要學習Spring。那麼什麼是Spring呢? Spring是一個開源的輕量級的Java開發框架,主要是爲了簡化開發和提升可維護性。
今天總結一下面試中有關Spring的面試題,若有不當請多指教!java
列舉一些重要的Spring模塊
談談Spring IOC
談談Spring AOP
Spring中的bean的做用域有哪些?
@Component和@Bean的區別是什麼?
說說本身對於Spring MVC瞭解?
談談SpringMVC工做原理
Spring框架中用到了哪些設計模式?
下圖對應的是 Spring4.x 版本git
IOC(Inverse of Control:控制反轉)是一種設計思想,就是將本來在程序中手動建立對象的控制權,交由Spring框架來管理。 IOC容器實際上就是個Map(key,value),Map 中存放的是各類對象。
將對象之間的相互依賴關係交給 IOC 容器來管理,並由 IOC 容器完成對象的注入。這樣能夠很大程度上簡化應用的開發,把應用從複雜的依賴關係中解放出來。 IOC 容器就像是一個工廠同樣,當咱們須要建立一個對象的時候,只須要配置好配置文件/註解便可,徹底不用考慮對象是如何被建立出來的。github
IOC源碼解析:IOC源碼解析面試
AOP(Aspect-Oriented Programming:面向切面編程)可以將那些與業務無關,卻爲業務模塊所共同調用的邏輯或責任(例如事務處理、日誌管理、權限控制等)封裝起來,便於減小系統的重複代碼,下降模塊間的耦合度,並有利於將來的可拓展性和可維護性。
Spring AOP就是基於動態代理的,若是要代理的對象,實現了某個接口,那麼Spring AOP會使用JDK Proxy
,去建立代理對象,而對於沒有實現接口的對象,就沒法使用 JDK Proxy 去進行代理了,這時候Spring AOP會使用Cglib
。spring
@Component 註解做用於類,而@Bean註解做用於方法。數據庫
@Component
一般是經過類路徑掃描來自動偵測以及自動裝配到Spring容器中。@Bean
註解一般是咱們在標有該註解的方法中定義產生這個 bean,@Bean
告訴了Spring這是某個類的示例,當我須要用它的時候還給我。編程
MVC 是一種設計模式,Spring MVC 是一款很優秀的 MVC 框架。Spring MVC 能夠幫助咱們進行更簡潔的Web層的開發,而且它天生與 Spring 框架集成。
Spring MVC 下咱們通常把後端項目分爲 Service層(處理業務)、Dao層(數據庫操做)、Entity層(實體類)、Controller層(控制層,返回數據給前臺頁面)。後端
原理以下圖所示:設計模式
流程說明(重要):瀏覽器
- 客戶端(瀏覽器)發送請求,直接請求到
DispatcherServlet
。DispatcherServlet
根據請求信息調用HandlerMapping
,解析請求對應的Handler
。- 解析到對應的
Handler
(也就是咱們日常說的Controller
控制器)後,開始由HandlerAdapter
適配器處理。HandlerAdapter
會根據Handler
來調用真正的處理器開處理請求,並處理相應的業務邏輯。- 處理器處理完業務後,會返回一個
ModelAndView
對象,Model
是返回的數據對象,View
是個邏輯上的View
。ViewResolver
會根據邏輯View
查找實際的View
。DispaterServlet
把返回的Model
傳給View
(視圖渲染)。- 把
View
返回給請求者(瀏覽器)
源碼解析:Spring設計模式源碼解析
BeanFactory
、ApplicationContext
建立 bean 對象。jdbcTemplate
、hibernateTemplate
等以 Template 結尾的對數據庫操做的類,它們就使用到了模板模式。Controller
。