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
本文章為轉載內容,我們尊重原作者對文章享有的著作權。如有內容錯誤或侵權問題,歡迎原作者聯繫我們進行內容更正或刪除文章。