spring

  • 對AOP的理解
  • AOP 面向切面編程,spring主要是通過 JDK 和 cglib 代理對象實現。spring aop 主要運用在事務、日誌、異常處理。通過在代碼前後做增強,實現業務邏輯的隔離,提高代碼的模塊化
  • 對IOC的理解
  • ioc 又叫做控制反轉,指通過spring來管理對象的創建,配置和生命週期。把 bean 的控制權交給spring,不需要人工來管理對象之間的複雜依賴關係,好處是易解耦。
  • spring aop 和 AspectJ aop
  • spring aop 基於動態代理實現,屬於運行時增強
  • aspectJ 屬於編譯時增強
  • 編譯時織入:源碼和增強代碼都有,直接使用 aspectj 編譯器編譯即可,生成一個新類
  • 編譯後織入:源碼已生成class或者打包成jar,此時增強方式則是編譯後織入
  • 加載時織入,是指jvm 加載類的時候織入
  • factoryBean 和 beanFactory 的區別
  • beanFactory 是bean的工廠,applicationContext的父類,IOC容器的核心,負責生產和管理bean對象
  • factoryBean 則是一個工廠Bean,可以定製某一個類型Bean實例
  • spring 支持哪幾種 bean 作用域
  • singleton: 默認的作用域,單例bean
  • prototype: 每次獲取的都是新的 bean
  • request 每次 request 請求創建一個 bean 對象
  • session 同一個 session 的 request 共享一個 bean 示例
  • global session: 全局作用域
  • spring 事務的實現原理
  • spring 有兩種事務實現,編程式事務 和 聲明式事務
  • spring 事務主要通過 aop 代理實現,對象代碼方法進行攔截,在方法執行前啓動事務,在方法完成後,根據是否異常,進行提交或則回滾
  • bean的生命週期
  • 實例化,創建一個bean 對象
  • 填充屬性,為屬性賦值
  • 如果實現 xxxAware 接口,通過不同類型的Aware接口拿到spring裏的資源
  • 如果實現 BeanPostProcess 則調用 postProcessBeforeInitialize 方法
  • 如配置了 ini-method ,則調用
  • 如實現 BeanPostProcess 則調用 postProcessAfterInitialize 方法
  • 如實現 DisposableBean 則調用
  • 執行 destroy-method 方法
  • 如何解決循環依賴
  • 三級緩存,第一級用來保存實例化,初始化都完成的對象
  • 第二級,用來保存實例化的對象,但未初始化完成的對象
  • 第三級:用來保存一個對象工廠,提供一個匿名內部類,用於創建二級緩存的對象
  • A->B B->A; a和b 互相依賴
  • 一開始時 a 實例化,並把a的對象工廠放入三級緩存
  • 接着注入 b ,轉去實例化 b
  • 創建 b 時 發現依賴 a, 依次從一到三級查詢 a,從三級緩存通過對象工廠獲取 a,將 a 實例放入二級緩存,並刪除三級緩存a的工廠。b 實例化完成放入一級緩存
  • a 繼續實例化,從一級緩存獲取 b 對象完成實例流程。從二級緩存刪除 a 並放入一級緩存
  • 使用二級緩存可以解決循環依賴嗎
  • spring的第三級緩存是為了處理代理對象,提前暴露代理後的對象。如果沒有代理,二級也是可以的
  • spring mvc 的工作流程
  • 用户向服務器發送請求,被spring的 servlet DispatcherServlet 獲取處理
  • DispatcherServlet 對url 進行解析,根據 url 調用 HandlerMapping 獲取對應的 handerExecutionChain(hander)
  • DispatcherServlet 根據 handler 找對應的適配器 HandlerAdapter 來執行 handler
  • 提取 request 數據模型,數據轉換,序列化等,填入 hander 入參,執行 controller 裏業務邏輯
  • handler 執行完返回一個 modelAndView 對象
  • 根據 modelAndView 選擇一個合適的 ViewResolver
  • ViewResolver 處理後返回響應給前端
  • spring 用到哪些設計模式
  • 單例模式:spring 的bean默認情況下都是單例
  • 工廠模式:通過 beanFactory 和 ApplicationContext 來生產 bean 對象
  • 代理模式:最常見的AOP 就是通過代理實現,spring主要是用到 JDK 和 cglib 代理
  • 模板方法模式:主要是一些對數據庫操作的類,jdbcTemplate,redisTemplate