一盘寡、 你對(duì)Spring框架的理解(特點(diǎn))蚌父? Spring框架有哪些模塊 ?
1贺纲、Spring是一個(gè)輕量級(jí)的IOC和AOP的容器框架航闺,目的是簡化企業(yè)應(yīng)用程序的開發(fā),使得開發(fā)者只需要關(guān)注業(yè)務(wù)需求猴誊;
特點(diǎn):簡化開發(fā)潦刃、解耦、集成其他框架
簡化開發(fā):spring對(duì)常用的API進(jìn)行了封裝懈叹;比如說對(duì)jdbc的封裝乖杠,使用spring jdbc訪問數(shù)據(jù)庫,就不需要考慮如何獲取連接和關(guān)閉的問題了
解耦:spring幫我們管理軟件之間的關(guān)系澄成,這樣對(duì)象之間的耦合性就降低了
集成其他框架:方便優(yōu)化和擴(kuò)展其他功能胧洒;比如說和Mybatis的集成
2、Spring框架已經(jīng)集合成20多個(gè)模塊墨状;
Spring Core:核心類庫卫漫,提供IOC服務(wù)
Spring Context:提供框架式的Bean訪問方式以及企業(yè)級(jí)功能
Spring AOP:提供AOP服務(wù)
Spring DAO:對(duì)JDBC的抽象,簡化了數(shù)據(jù)訪問異常的處理
Spring ORM:對(duì)現(xiàn)有的ORM框架的支持
Spring Web:提供了基本的面向Web綜合特性肾砂,例如多方文件上傳列赎;
Spring MVC:提供了面向Web應(yīng)用的Model-View-Controller實(shí)現(xiàn)
二、Spring的優(yōu)點(diǎn)
1镐确、簡化開發(fā)包吝、解耦、集成其他框架
2源葫、低侵入式設(shè)計(jì)漏策,代碼污染級(jí)別低
3、Spring的DI機(jī)制提高了軟件之間的解耦
4臼氨、Spring AOP支持將一些通用的任務(wù)進(jìn)行集中式的管理掺喻,例如:安全、事務(wù)储矩、日志等
三感耙、什么是控制反轉(zhuǎn)(IOC),什么是依賴注入(DI)持隧?
IOC:就是對(duì)象之間的依賴關(guān)系由容器來創(chuàng)建即硼,本來這層關(guān)系是由開發(fā)者自己來創(chuàng)建和維護(hù)的,使用spring框架后交給容器去管理維護(hù)屡拨,
這就是控制反轉(zhuǎn)只酥,BeanFactory接口是Spring Ioc容器的核心接口
DI:在spring容器中褥实,通過set方法建立對(duì)象之間的依賴關(guān)系
控制反轉(zhuǎn)是目標(biāo),而依賴注入是我們實(shí)現(xiàn)控制反轉(zhuǎn)的一種手段
四裂允、Java中實(shí)現(xiàn)依賴注入的三種方式
1损离、構(gòu)造器注入
2、set方法注入
3绝编、接口注入
五僻澎、Spring容器中如何創(chuàng)建對(duì)象
無參構(gòu)造創(chuàng)建
靜態(tài)工廠創(chuàng)建
實(shí)例工廠創(chuàng)建
六、Spring有幾種配置方式
1十饥、基于XML文件配置
2窟勃、基于注解的配置
注解代替XML方式的bean元素的配置,
這就是組件掃描逗堵,容器會(huì)掃描指定的包以及子包下面所有的類秉氧,如果類有一些特定的注解,則納入容器進(jìn)行管理
3蜒秤、基于Java的配置
七汁咏、Spring Bean的生命周期?
Spring Bean的生命周期指的是Bean元素被實(shí)例化垦藏,和被銷毀的過程梆暖。我們通過init-method屬性指定初始化方法;通過destroy-method方法指定銷毀方法
八掂骏、什么叫延遲加載轰驳?
容器啟動(dòng)后將所有作用域?yàn)閱卫腷ean創(chuàng)建好,但是有的業(yè)務(wù)場景我們不需要提前創(chuàng)建好
我們可以在bean中設(shè)置lazy-init為true弟灼,容器啟動(dòng)后作用域?yàn)閱卫腷ean就不再創(chuàng)建
九级解、什么叫自動(dòng)裝配?
就是將一個(gè)bean注入其他的bean的property中田绑,默認(rèn)情況下勤哗,容器不會(huì)自動(dòng)裝配,需要我們手動(dòng)設(shè)定掩驱。Spring可以通過Bean Factory的注入方式來搞定bean之間的依賴關(guān)系芒划,達(dá)到自動(dòng)裝配的目的
十、Spring Bean元素的作用域欧穴?
Spring Bean元素支持5種作用域
1民逼、Singleton:單例模式,在整個(gè)Spring IOC的容器中涮帘,在此模式定義的bean將只有一個(gè)實(shí)例
2拼苍、Prototype:多例模式,每次通過容器getBean方法獲取bean時(shí)调缨,都會(huì)產(chǎn)生一個(gè)新的Bean的實(shí)例
3疮鲫、Request:對(duì)于每次http請(qǐng)求時(shí)吆你,使用request定義的bean都會(huì)產(chǎn)生一個(gè)新的實(shí)例,只有在web應(yīng)用時(shí)俊犯,作用域才會(huì)生效
4妇多、Session:對(duì)于每次http session請(qǐng)求時(shí),使用session定義的bean都會(huì)產(chǎn)生一個(gè)新的實(shí)例
5瘫析、Globalsession:每個(gè)全局的http session砌梆,使用session定義的bean都會(huì)產(chǎn)生一個(gè)新的實(shí)例
十一默责、Spring Bean是線程安全的嗎贬循?
Spring Bean并沒有對(duì)單例的bean進(jìn)行多線程的封裝處理,線程安全問題和并發(fā)問題需要開發(fā)者自己考慮
實(shí)際上桃序,大部分的bean的狀態(tài)是固定的杖虾,因此spring單例的bean是安全的;如果bean有多種狀態(tài)媒熊,就需要考慮線程安全的問題了
十二奇适、Spring框架中都用到了哪些設(shè)計(jì)模式
1、代理模式芦鳍,在AOP中被使用最多
2嚷往、單例模式,在Spring配置文件中定義bean的時(shí)候默認(rèn)的是單例模式
3柠衅、工廠模式皮仁,BeanFactory用來創(chuàng)建對(duì)象的實(shí)例
4、模板方法菲宴,用來解決重復(fù)性代碼
5贷祈、前端控制器,Spring提供了DispatcherServlet對(duì)請(qǐng)求進(jìn)行分發(fā)
6喝峦、視圖幫助势誊,Spring提供了一系列的JSP標(biāo)簽
7、依賴注入谣蠢,它是貫穿于BeanFactory/ApplicationContext接口的核心理念
十三粟耻、Spring AOP(面向切面)編程的原理
AOP面向切面編程是一種思想,它是在業(yè)務(wù)處理過程中的切面進(jìn)行提取眉踱,以達(dá)到優(yōu)化代碼的目的挤忙,減少重復(fù)代碼的目的,比如我們在編寫各個(gè)模塊的業(yè)務(wù)邏輯時(shí)勋锤,都會(huì)寫日志記錄饭玲、事務(wù)控制等等這些明顯存在重復(fù)的代碼,我們運(yùn)用面向切面的編程思想叁执,采用橫切技術(shù)茄厘,將代碼中的重復(fù)部分抽取出來放在其他地方集中管理矮冬,調(diào)用。形成日志切面次哈、事務(wù)切面等胎署,使工作效率提高,代碼變得整潔優(yōu)雅窑滞,是面向?qū)ο缶幊痰囊环N擴(kuò)展
Spring AOP的編程原理:
代理機(jī)制
JDK的動(dòng)態(tài)代理:只能用于實(shí)現(xiàn)接口的類產(chǎn)生代理
Cglib代理:針對(duì)于沒有實(shí)現(xiàn)接口的類產(chǎn)生代理琼牧,應(yīng)用的是底層的字節(jié)碼增強(qiáng)技術(shù),生成當(dāng)前類的子類對(duì)象
十四哀卫、什么是Spring MVC巨坊?
Spring MVC是一個(gè)基于MVC框架用于簡化web應(yīng)用程序開發(fā)的應(yīng)用開發(fā)框架,它是spring的一部分此改,屬于表現(xiàn)層的框架
MVC(Model 模型趾撵,View 視圖,Controller 控制器)
它是一種軟件架構(gòu)思想共啃,也是一種開發(fā)模式占调,它將軟件劃分為三個(gè)模塊,分別是模型移剪、視圖究珊、控制器。
模型:用于封裝業(yè)務(wù)邏輯處理纵苛;視圖:用于數(shù)據(jù)展現(xiàn)和操作界面剿涮;控制器:用于協(xié)調(diào)視圖和模型;
處理流程:視圖將請(qǐng)求發(fā)送給控制器赶站,控制器選擇對(duì)應(yīng)的模型來處理幔虏,模型將處理結(jié)果交給控制器,控制器選擇合適的視圖來展現(xiàn)處理結(jié)果
十五贝椿、Spring MVC的五大組件
1想括、前端控制器(DispatcherServlet)
2、映射處理器(HandlerMapping)
3烙博、處理器(Controller)
4瑟蜈、模型和視圖(ModelAndView)
5、視圖解析器(ViewResolver)
十六渣窜、Spring MVC的運(yùn)行原理
客戶端將請(qǐng)求提交到前端控制器铺根,前端控制器查詢一個(gè)或多個(gè)映射處理器,找到處理請(qǐng)求的Controller乔宿,前端控制器將請(qǐng)求提交到Controller位迂,Controller調(diào)用業(yè)務(wù)邏輯處理后,返回模型和視圖,前端控制器查詢一個(gè)或多個(gè)視圖解析器掂林,找到模型和視圖指定的視圖臣缀,視圖負(fù)責(zé)將結(jié)果展現(xiàn)給用戶