Spring的概念
Spring是個(gè)java企業(yè)級應(yīng)用的開源開發(fā)框架,旨在降低應(yīng)用程序開發(fā)的復(fù)雜度。是一個(gè)輕量級,松散耦合的,具有分層體系結(jié)構(gòu),可繼承其他框架的框架。
Spring的優(yōu)點(diǎn)
輕量:基本的版本大約2MB。
控制反轉(zhuǎn)(IOC):實(shí)現(xiàn)了松散耦合,將對象交給容器管理,對象們給出它們的依賴,由容器去創(chuàng)建或查找(簡述:反轉(zhuǎn):指的是資源的反轉(zhuǎn),之前是對象去容器請求,控制反轉(zhuǎn)后,是容器向調(diào)用者注入)。
在系統(tǒng)運(yùn)行時(shí),容器創(chuàng)建被調(diào)用者,然后注入調(diào)用者中,這種情況叫做依賴注入(DI),依賴注入是通過java的反射機(jī)制實(shí)現(xiàn)的。
反射:允許程序在運(yùn)行的時(shí)候動(dòng)態(tài)地生成對象,執(zhí)行對象,設(shè)置對象屬性。
面向切面(AOP):
面向切面編程把軟件系統(tǒng)分為兩個(gè)部分:核心關(guān)注點(diǎn)和橫切關(guān)注點(diǎn),將業(yè)務(wù)程序和系統(tǒng)服務(wù)分開;
面向切面編程是基于代理模式實(shí)現(xiàn)的;
代理模式分為:
靜態(tài)代理:編譯時(shí)
動(dòng)態(tài)代理:運(yùn)行時(shí)
動(dòng)態(tài)代理實(shí)現(xiàn)的兩種方式:JDK代理和CGlib代理
JDK基于接口的動(dòng)態(tài)代理
CGilb實(shí)現(xiàn)子類的動(dòng)態(tài)代理
容器:Spring包含并管理對象的生命周期和配置:
MVC框架:Spring的WEB框架
事務(wù)管理:Spring提供了一個(gè)持續(xù)的事務(wù)管理接口,可以擴(kuò)展上至本地事務(wù)下至全局事務(wù)(JTA)
異常處理:把具體技術(shù)相關(guān)的異常轉(zhuǎn)化為一致的unchecked異常
解釋JDBC抽象和DAO模塊
保證數(shù)據(jù)庫代碼的簡潔,并能避免數(shù)據(jù)庫資源錯(cuò)誤關(guān)閉導(dǎo)致的問題,在各種不同的數(shù)據(jù)庫的錯(cuò)誤信息之上,提供了一個(gè)統(tǒng)一的異常訪問層,提供事務(wù)管理服務(wù)。
BeanFactory和Application contexts區(qū)別?
Application contexts 提供了一個(gè)方法處理文本信息,一個(gè)通常的做法是加載文本資源(比如鏡像),可以向注冊為監(jiān)聽器的bean發(fā)布事件。
在容器或容器內(nèi)的對象,由BeanFactory以程序化方式處理操作,也可以在Application contexts中以聲明的方式處理。
依賴注入的方式:
1.構(gòu)造器依賴注入:構(gòu)造器依賴注入通過容器觸發(fā)一個(gè)類的構(gòu)造器來實(shí)現(xiàn)的,該類有一系列參數(shù),每個(gè)參數(shù)愛表一個(gè)對其他類的依賴。
2.Setter方式注入:Setter方法注入是容器通過調(diào)用無參構(gòu)造器或者無參static工廠方法實(shí)例化bean之后,調(diào)用該bean的setter犯法。即實(shí)現(xiàn)了基于setter的依賴注入。
用構(gòu)造器參數(shù)實(shí)現(xiàn)強(qiáng)制依賴,setter方法實(shí)現(xiàn)可選依賴。
Spring Bean的定義包含什么?
容器必知的所有配置化元數(shù)據(jù),包含如何創(chuàng)建一個(gè)bean,它惡生命周期詳情及它的依賴。
配置元數(shù)據(jù)的方法:
1.XML配置文件。
2.基于注解的配置。
3.基于java的配置。
定義類的作用域
bean定義中的scope,默認(rèn)singleton(單例)
spring支持bean的作用域:
1.singleton:bean在每一個(gè)spring ioc容器中只有一個(gè)實(shí)例。
2.prototype:一個(gè)bean可以有多個(gè)實(shí)例。
3.request:每次http請求就回創(chuàng)建一個(gè)bean,僅基于web的ApplicationContext情形下有效。
4.session:在一個(gè)http session中,一個(gè)bean定義對應(yīng)一個(gè)實(shí)例。同3條件。
5.global-session:在一個(gè)全局的http session中,一個(gè)bean定義對應(yīng)一個(gè)實(shí)例,同3,4的條件下。
spring的bean是非線程安全的
重要的bean生命周期方法:setup,容器加載bean的時(shí)候被調(diào)用;teardown,容器卸載類的時(shí)候被調(diào)用。
bean的裝配:
容器必須知道bean的依賴關(guān)系,以及如何依賴注入來把它們組裝在一起。
自動(dòng)裝配的方式:
1.no:默認(rèn)不進(jìn)行自動(dòng)裝配,通過顯示設(shè)置ref屬性來進(jìn)行裝配
2.byName:通過參數(shù)名自動(dòng)裝配,antowire屬性被設(shè)置成byname,容器試圖匹配,裝配和該bean具有相同名字的bean。
3.byType:通過參數(shù)類型自動(dòng)裝配,autowire屬性設(shè)置為bytype,具有同類型的bean。多個(gè)bean符合將拋出異常。
4.constructor:這個(gè)方式類似于byType, 但是要提供給構(gòu)造器參數(shù),如果沒有確定的帶參數(shù)的構(gòu)造器參數(shù)類型,將會(huì)拋出異常。
5.autodetect:首先嘗試使用constructor來自動(dòng)裝配,如果無法工作,則使用byType方式。
Spring支持的事務(wù)管理類型
Spring支持兩種類型的事務(wù)管理:
編程式事務(wù)管理:這意味你通過編程的方式管理事務(wù),給你帶來極大的靈活性,但是難維護(hù)。
?明式事務(wù)管理:這意味著你可以將業(yè)務(wù)代碼和事務(wù)管理分離,你只需用注解和XML配置來管理事務(wù)。