Spring是什么
spring是一個(gè)輕量級(jí)的 控制反轉(zhuǎn)(Ioc)和面向切面(AOP)的容器框架
IOC: 輕量級(jí)的控制反轉(zhuǎn),達(dá)到松耦合的目的
將控制權(quán)交出去饮潦,使用時(shí)得到對(duì)象
AOP:面向切面赠堵,允許通過分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級(jí)服務(wù)進(jìn)行內(nèi)聚性的開發(fā)----例如倉庫管理的業(yè)務(wù)邏輯和日志記錄的系統(tǒng)服務(wù)
事務(wù)管理剂跟,日志等
Spring框架特點(diǎn)
-從大小與開銷兩方面而言Spring都是輕量的
-通過控制反轉(zhuǎn)(IoC)的技術(shù)達(dá)到松耦合的目的
-提供了面向切面編程的豐富支持,允許通過分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級(jí)服務(wù)進(jìn)行內(nèi)聚性的開發(fā)
-包含并管理應(yīng)用對(duì)象的配置和生命周期,這個(gè)意義上是一種容器
-將簡(jiǎn)單的組件配置沼本、組合稱為復(fù)雜的應(yīng)用,這個(gè)意義上是框架
內(nèi)聚性:開發(fā)的原則:低耦合敬察,高內(nèi)聚
耦合:類與類的關(guān)系
內(nèi)聚:自己完成某件事的能力
適用范圍:
1.構(gòu)建企業(yè)應(yīng)用(SpringNVC+Spring+Hibernate/ibatis)
2.單獨(dú)使用Bean容器(Bean管理)
3.單獨(dú)使用AOP進(jìn)行切面處理
4.其他的Spring功能漠畜,如:對(duì)消息的支持等
5.在互聯(lián)網(wǎng)中應(yīng)用币他。
軟件框架:
軟件框架:
通常是指為了實(shí)現(xiàn)某個(gè)業(yè)界標(biāo)準(zhǔn)或完成特定基本任務(wù)的軟件組件規(guī)范,也指為了實(shí)現(xiàn)某個(gè)軟件組件規(guī)范時(shí)憔狞,提供規(guī)范所要求之基本功能的軟件產(chǎn)品
為什么使用框架
軟件系統(tǒng)日趨復(fù)雜
重用度高蝴悉,開發(fā)效率和質(zhì)量高
軟件設(shè)計(jì)人員要專注于對(duì)領(lǐng)域的了解,使需求更充分 易于上手瘾敢、快速解決問題
框架的特點(diǎn)
半成品
封裝了特定的處理流程和控制邏輯
成熟的拍冠、不斷升級(jí)改進(jìn)的軟件
框架與類庫的區(qū)別
框架一般是封裝了邏輯、高內(nèi)聚的簇抵,類庫則是松散的工具組合
接口
什么是接口
1庆杜、用于溝通的中介物的抽象化。(相當(dāng)于中間者碟摆,外部與接口溝通晃财,但不與接口實(shí)現(xiàn)類進(jìn)行溝通)
2、實(shí)體把自己提供給外界的一種抽象化說明典蜕,用以由內(nèi)部操作分離出外部溝通方法断盛,使其能被修改內(nèi)部而不影響外界其他實(shí)體與其交互的方式(接口提供外部功能,至于內(nèi)部的具體實(shí)現(xiàn)不對(duì)外公開愉舔,比如:注冊(cè)钢猛,只需要提供手機(jī)號(hào)、密碼等信息就可以進(jìn)行注冊(cè)轩缤,具體怎么實(shí)現(xiàn)的命迈,邏輯怎樣判斷的贩绕,數(shù)據(jù)存儲(chǔ)在哪里等具體實(shí)現(xiàn)邏輯不對(duì)外公開)
3、對(duì)應(yīng)java接口即聲明躺翻,聲明了哪些方法是對(duì)外公開提供的丧叽,在Java8中,接口可以擁有方法體公你,(某種程度上和抽象類具有相似的功能)踊淳。
面向接口編程:
1、結(jié)構(gòu)設(shè)計(jì)中陕靠,分清層次及調(diào)用關(guān)系迂尝,每層只向外(上層)提供一組功能接口,各層間僅依賴接口而非實(shí)現(xiàn)類剪芥。(多態(tài)的體現(xiàn))
2垄开、優(yōu)點(diǎn):接口實(shí)現(xiàn)的變動(dòng)不影響各層間的調(diào)用,這一點(diǎn)在向外提供公共服務(wù)或者在企業(yè)內(nèi)部提供公共服務(wù)中尤為重要税肪,由于公共服務(wù)溉躲,所以穩(wěn)定性一定很重要(對(duì)外提供接口保證了接口的穩(wěn)定性,對(duì)于接口的實(shí)現(xiàn)可以根據(jù)某一時(shí)期的具體情況或者某一時(shí)期具體邏輯的變化進(jìn)行調(diào)整)
3益兄、面向接口編程中的“接口”:用于隱藏具體實(shí)現(xiàn)和實(shí)現(xiàn)多態(tài)性的組件锻梳,面向接口編程在IOC中應(yīng)用非常廣泛(對(duì)外提供調(diào)用說明的,但不包含具體的實(shí)現(xiàn)净捅,具體的實(shí)現(xiàn)由接口實(shí)現(xiàn)類完成)
什么是IOC
IOC概念:(Inversion of Control)控制反轉(zhuǎn)疑枯,控制權(quán)的轉(zhuǎn)移,應(yīng)用程序本身不負(fù)責(zé)依賴對(duì)象的創(chuàng)建和維護(hù)蛔六,而是由外部容器負(fù)責(zé)創(chuàng)建(創(chuàng)建對(duì)象并且組裝對(duì)象之間的依賴關(guān)系)和維護(hù)(正常情況下使用對(duì)象則需要new對(duì)象荆永,而使用外部容器之后,對(duì)象就被容器管理了国章,包括對(duì)象的創(chuàng)建具钥、初始化、銷毀等液兽,對(duì)象就可以直接從容器中直接拿過來用)骂删,IOC容器在初始化時(shí),會(huì)創(chuàng)建一系列的對(duì)象抵碟,同時(shí)把對(duì)象之間的依賴關(guān)系通過注入的方式組織起來。(組裝:一個(gè)類A坏匪,和一個(gè)類B拟逮,類A把類B作為自己的屬性,當(dāng)IOC進(jìn)行實(shí)例化時(shí)适滓,先實(shí)例化A敦迄,再實(shí)例化B,再把B注入到A中)
比喻:我們手動(dòng)去new一個(gè)對(duì)象,就像我們想要一所房子罚屋,我們自己手動(dòng)的買材料去建造苦囱,而使用容器之后,就像找開發(fā)商脾猛,直接可以入住房子撕彤。
DI概念:(Dependency Injection)依賴注入,控制反轉(zhuǎn)的一種實(shí)現(xiàn)方式猛拴,獲得依賴對(duì)象的過程由自身管理變?yōu)榱擞蒊OC容器主動(dòng)注入羹铅,所謂依賴注入,就是由IOC容器在運(yùn)行期間愉昆,動(dòng)態(tài)地將某種依賴關(guān)系注入到對(duì)象之中职员。
IOC目的:創(chuàng)建對(duì)象并且組裝對(duì)象之間的關(guān)系(IOC容器在初始化時(shí),會(huì)初始化一系列的對(duì)象跛溉,同時(shí)能把對(duì)象之間的依賴關(guān)系通過注入的方式組織起來)例如:一個(gè)類A里存在另一個(gè)類B的聲明焊切,IOC會(huì)負(fù)責(zé)創(chuàng)建A和B的對(duì)象,并通過A的構(gòu)造方法注入B的實(shí)例芳室。
Spring官網(wǎng)給出IOC工作原理
描述IOC
Spring的Bean配置
1专肪、在IOC容器中所有的對(duì)象都稱為Bean。
2渤愁、Spring的Bean配置方式有兩種:基于XML配置牵祟、注解配置。
3抖格、XML中配置:<bean id="bean的唯一標(biāo)識(shí)",class="交給容器管理的類的路徑"></bean>
Bean容器的初始化
基礎(chǔ):兩個(gè)包:
org.springframework.beans
org.springframework.context
beans提供BeanFactory及其子類诺苹,它提供配置結(jié)構(gòu)和基本功能,并加載初始化Bean
context提供ApplicationContext及實(shí)現(xiàn)類保存了Bean對(duì)象并在Spring中被廣泛使用
初始化ApplicationContext方式:
1雹拄、加載本地文件(指定磁盤下某路徑下的xml文件)
2收奔、Classpath(相對(duì)路徑,相對(duì)項(xiàng)目的路徑)
3滓玖、Web應(yīng)用中依賴servlet或Listener初始化Bean容器(兩種方式坪哄,任選其一)
示例如圖