一、 你對Spring框架的理解(特點)? Spring框架有哪些模塊 ?
1、Spring是一個輕量級的IOC和AOP的容器框架,目的是簡化企業應用程序的開發,使得開發者只需要關注業務需求;
特點:簡化開發、解耦、集成其他框架
簡化開發:spring對常用的API進行了封裝;比如說對jdbc的封裝,使用spring jdbc訪問數據庫,就不需要考慮如何獲取連接和關閉的問題了
解耦:spring幫我們管理軟件之間的關系,這樣對象之間的耦合性就降低了
集成其他框架:方便優化和擴展其他功能;比如說和Mybatis的集成
2、Spring框架已經集合成20多個模塊;
Spring Core:核心類庫,提供IOC服務
Spring Context:提供框架式的Bean訪問方式以及企業級功能
Spring AOP:提供AOP服務
Spring DAO:對JDBC的抽象,簡化了數據訪問異常的處理
Spring ORM:對現有的ORM框架的支持
Spring Web:提供了基本的面向Web綜合特性,例如多方文件上傳;
Spring MVC:提供了面向Web應用的Model-View-Controller實現
二、Spring的優點
1、簡化開發、解耦、集成其他框架
2、低侵入式設計,代碼污染級別低
3、Spring的DI機制提高了軟件之間的解耦
4、Spring AOP支持將一些通用的任務進行集中式的管理,例如:安全、事務、日志等
三、什么是控制反轉(IOC),什么是依賴注入(DI)?
IOC:就是對象之間的依賴關系由容器來創建,本來這層關系是由開發者自己來創建和維護的,使用spring框架后交給容器去管理維護,
這就是控制反轉,BeanFactory接口是Spring Ioc容器的核心接口
DI:在spring容器中,通過set方法建立對象之間的依賴關系
控制反轉是目標,而依賴注入是我們實現控制反轉的一種手段
四、Java中實現依賴注入的三種方式
1、構造器注入
2、set方法注入
3、接口注入
五、Spring容器中如何創建對象
無參構造創建
靜態工廠創建
實例工廠創建
六、Spring有幾種配置方式
1、基于XML文件配置
2、基于注解的配置
注解代替XML方式的bean元素的配置,
這就是組件掃描,容器會掃描指定的包以及子包下面所有的類,如果類有一些特定的注解,則納入容器進行管理
3、基于Java的配置
七、Spring Bean的生命周期?
Spring Bean的生命周期指的是Bean元素被實例化,和被銷毀的過程。我們通過init-method屬性指定初始化方法;通過destroy-method方法指定銷毀方法
八、什么叫延遲加載?
容器啟動后將所有作用域為單例的bean創建好,但是有的業務場景我們不需要提前創建好
我們可以在bean中設置lazy-init為true,容器啟動后作用域為單例的bean就不再創建
九、什么叫自動裝配?
就是將一個bean注入其他的bean的property中,默認情況下,容器不會自動裝配,需要我們手動設定。Spring可以通過Bean Factory的注入方式來搞定bean之間的依賴關系,達到自動裝配的目的
十、Spring Bean元素的作用域?
Spring Bean元素支持5種作用域
1、Singleton:單例模式,在整個Spring IOC的容器中,在此模式定義的bean將只有一個實例
2、Prototype:多例模式,每次通過容器getBean方法獲取bean時,都會產生一個新的Bean的實例
3、Request:對于每次http請求時,使用request定義的bean都會產生一個新的實例,只有在web應用時,作用域才會生效
4、Session:對于每次http session請求時,使用session定義的bean都會產生一個新的實例
5、Globalsession:每個全局的http session,使用session定義的bean都會產生一個新的實例
十一、Spring Bean是線程安全的嗎?
Spring Bean并沒有對單例的bean進行多線程的封裝處理,線程安全問題和并發問題需要開發者自己考慮
實際上,大部分的bean的狀態是固定的,因此spring單例的bean是安全的;如果bean有多種狀態,就需要考慮線程安全的問題了
十二、Spring框架中都用到了哪些設計模式
1、代理模式,在AOP中被使用最多
2、單例模式,在Spring配置文件中定義bean的時候默認的是單例模式
3、工廠模式,BeanFactory用來創建對象的實例
4、模板方法,用來解決重復性代碼
5、前端控制器,Spring提供了DispatcherServlet對請求進行分發
6、視圖幫助,Spring提供了一系列的JSP標簽
7、依賴注入,它是貫穿于BeanFactory/ApplicationContext接口的核心理念
十三、Spring AOP(面向切面)編程的原理
AOP面向切面編程是一種思想,它是在業務處理過程中的切面進行提取,以達到優化代碼的目的,減少重復代碼的目的,比如我們在編寫各個模塊的業務邏輯時,都會寫日志記錄、事務控制等等這些明顯存在重復的代碼,我們運用面向切面的編程思想,采用橫切技術,將代碼中的重復部分抽取出來放在其他地方集中管理,調用。形成日志切面、事務切面等,使工作效率提高,代碼變得整潔優雅,是面向對象編程的一種擴展
Spring AOP的編程原理:
代理機制
JDK的動態代理:只能用于實現接口的類產生代理
Cglib代理:針對于沒有實現接口的類產生代理,應用的是底層的字節碼增強技術,生成當前類的子類對象
十四、什么是Spring MVC?
Spring MVC是一個基于MVC框架用于簡化web應用程序開發的應用開發框架,它是spring的一部分,屬于表現層的框架
MVC(Model 模型,View 視圖,Controller 控制器)
它是一種軟件架構思想,也是一種開發模式,它將軟件劃分為三個模塊,分別是模型、視圖、控制器。
模型:用于封裝業務邏輯處理;視圖:用于數據展現和操作界面;控制器:用于協調視圖和模型;
處理流程:視圖將請求發送給控制器,控制器選擇對應的模型來處理,模型將處理結果交給控制器,控制器選擇合適的視圖來展現處理結果
十五、Spring MVC的五大組件
1、前端控制器(DispatcherServlet)
2、映射處理器(HandlerMapping)
3、處理器(Controller)
4、模型和視圖(ModelAndView)
5、視圖解析器(ViewResolver)
十六、Spring MVC的運行原理
客戶端將請求提交到前端控制器,前端控制器查詢一個或多個映射處理器,找到處理請求的Controller,前端控制器將請求提交到Controller,Controller調用業務邏輯處理后,返回模型和視圖,前端控制器查詢一個或多個視圖解析器,找到模型和視圖指定的視圖,視圖負責將結果展現給用戶