更新時(shí)間:2022-05-10 10:47:16 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1392次
Spring是一個(gè)輕量級(jí)的IoC/DI和AOP容器的開(kāi)源框架,大家如果感興趣,可以看看Spring AOP簡(jiǎn)介來(lái)了解一下。
Spring 能幫我們低侵入/低耦合地根據(jù)配置文件創(chuàng)建及組裝對(duì)象之間的依賴(lài)關(guān)系 //解耦
Spring 面向切面編程能幫助我們無(wú)耦合的實(shí)現(xiàn)日志記錄,性能統(tǒng)計(jì),安全控制等 //提高代碼重用性
Spring 能非常簡(jiǎn)單的且強(qiáng)大的聲明式事務(wù)管理 //使用xml或注解的方法,底層用到動(dòng)態(tài)代理
Spring 提供了與第三方數(shù)據(jù)訪(fǎng)問(wèn)框架(如JPA)無(wú)縫集成,且自己也提供了一套JDBC模板來(lái)方便數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)
Spring 提供與第三方Web框架無(wú)縫集成,且自己也提供了一套 SpringMVC 框架,來(lái)方便 Web 層搭建
Ioc:
(1)控制反轉(zhuǎn),是一種設(shè)計(jì)思想,就是原本在程序中需要手動(dòng)創(chuàng)建對(duì)象的權(quán)利,交給spring框架管理
(2)Ioc容器是實(shí)現(xiàn)Ioc的載體,Ioc容器實(shí)際上就是個(gè)Map(key,value),map中存放各種對(duì)象
(3)Ioc容器就像一個(gè)工廠(chǎng)一樣,當(dāng)我們需要?jiǎng)?chuàng)建一個(gè)對(duì)象時(shí),只需要配置好配置文件或貼注解即可,
完全不用考慮對(duì)象時(shí)如何被創(chuàng)建出來(lái)的
(4)將對(duì)象相互依賴(lài)的關(guān)系交給ioc容器管理,這樣可以很大程度簡(jiǎn)化應(yīng)用開(kāi)發(fā)
(5)使用Ioc的話(huà),我們只需要配置好,在需要的地方引用就好,這大大的增加了項(xiàng)目的可維護(hù)性且降低了開(kāi)發(fā)難度
DI:
(1)指 Spring 創(chuàng)建對(duì)象的過(guò)程中,將對(duì)象依賴(lài)屬性通過(guò)配置設(shè)值給該對(duì)象
(2)就是給對(duì)象的屬性設(shè)置屬性值
//Ioc創(chuàng)建對(duì)象,Di給屬性設(shè)置值
Aop:面向切面編程
(1)能夠?qū)⒛切┡c業(yè)務(wù)無(wú)關(guān),卻為業(yè)務(wù)模塊所共同調(diào)用的邏輯和責(zé)任封裝起來(lái),
便于減少重復(fù)代碼,降低模塊間的耦合度,并有利于未來(lái)的可拓展性和可維護(hù)性
(2)Spring Aop就是基于動(dòng)態(tài)代理的,當(dāng)要代理的對(duì)象實(shí)現(xiàn)了某個(gè)接口,就會(huì)使用Jdk動(dòng)態(tài)代理
(3)如果沒(méi)有某個(gè)接口,就是使用cglib生成一個(gè)被代理對(duì)象的子類(lèi)作為代理
//使用aop之后我們可以把一些通用的功能抽象出來(lái),在需要的時(shí)候自己使用即可,這樣大大的簡(jiǎn)化了代碼量
//常用的aop的有 事務(wù)處理 日志管理 權(quán)限控制
//作用域:在 Spring 容器中是指其創(chuàng)建的 bean 對(duì)象相對(duì)于其他 bean 對(duì)象的請(qǐng)求可見(jiàn)范圍
singleton : 唯一bean 實(shí)例,Spring 中的 bean 默認(rèn)都是單例的。
prototype : 多例,每次請(qǐng)求都會(huì)創(chuàng)建一個(gè)新的 bean 實(shí)例,多例只會(huì)初始化和銷(xiāo)毀,不會(huì)存到容器中進(jìn)行管理
request : 每一次HTTP請(qǐng)求都會(huì)產(chǎn)生一個(gè)新的bean,該bean僅在當(dāng)前HTTP request內(nèi)有效。
session : 每一次HTTP請(qǐng)求都會(huì)產(chǎn)生一個(gè)新的 bean,該bean僅在當(dāng)前 HTTP session 內(nèi)有效。
/*使用總結(jié):在開(kāi)發(fā)中主要使用 scope="singleton"。對(duì)于 Struts1 的 Action 使用 request,
Struts2 中的 Action 使 用 prototype 類(lèi)型,其他使用 singleton,即不配置
(1)客戶(hù)端發(fā)出http請(qǐng)求給web服務(wù)器,web服務(wù)器對(duì)http請(qǐng)求進(jìn)行解析,如果匹配DispatcherServlet的請(qǐng)求映射路徑(在web.xml中指定),web容器將請(qǐng)求轉(zhuǎn)交給DispatcherServlet.
(2)DipatcherServlet接收到這個(gè)請(qǐng)求之后將根據(jù)請(qǐng)求的信息(包括URL、Http方法、請(qǐng)求報(bào)文頭和請(qǐng)求參數(shù)Cookie等)以及HandlerMapping的配置找到處理請(qǐng)求的處理器Controller(Handler)。
(3)DispatclierServlet 根據(jù) HandlerMapping 找到對(duì)應(yīng)的Handler,處理權(quán)交給Handler ( Handler將具體的處理進(jìn)行封裝),再由具體的處理適配器 HandlerAdapter對(duì)Handler進(jìn)行具體的調(diào)用。
(4)Handler對(duì)數(shù)據(jù)處理完成以后將返回一個(gè)ModeAndView對(duì)象給DispatcherServlet.
(5)Handler返回的ModelAndView只是一個(gè)邏輯視圖并不是一個(gè)正式的視圖,dspatcherSevlet通過(guò)ViewResolver將邀輯視圖轉(zhuǎn)化為真正的視圖view(這句話(huà)簡(jiǎn)單的就是返回一個(gè)要返回的頁(yè)面的相對(duì)路徑,通過(guò)試圖解析器轉(zhuǎn)換成具體那個(gè)頁(yè)面)。
(6)DispatcherServlet通過(guò)model解析出ModeAndView中的參數(shù)進(jìn)行解析最終展現(xiàn)出完整的view并返回給客戶(hù)端
//簡(jiǎn)化
1. 客戶(hù)端(瀏覽器)發(fā)送請(qǐng)求到dispatcherServlet前端控制器
2. DispatcherServlet 根據(jù)請(qǐng)求信息調(diào)用 HandlerMapping ,解析請(qǐng)求對(duì)應(yīng)的 Handler
3. 解析到對(duì)應(yīng)的 Handler(也就是我們平常說(shuō)的 Controller 控制器)后,開(kāi)始由HandlerAdapter 適配器處理
4. HandlerAdapter 會(huì)根據(jù) Handler 來(lái)調(diào)用真正的處理器開(kāi)處理請(qǐng)求,并處理相應(yīng)的業(yè)務(wù)邏輯
5. 處理器處理完業(yè)務(wù)后,會(huì)返回一個(gè) ModelAndView 對(duì)象,Model 是返回的數(shù)據(jù)對(duì)象,View 是個(gè)邏輯上的 View
6. ViewResolver 會(huì)根據(jù)邏輯 View 查找實(shí)際的 View
7. DispaterServlet 把返回的 Model 傳給 View (視圖渲染)
8. 把 View 返回給請(qǐng)求者(瀏覽器)
(1)編程式事務(wù),在代碼中硬編碼。(不推薦使用)
(2)聲明式事務(wù),在配置文件中配置(推薦使用)
聲明式事務(wù)又分為兩種:
1)基于XML的聲明式事務(wù)
2)基于注解的聲明式事務(wù)
(1)工廠(chǎng)設(shè)計(jì)模式 : Spring使用工廠(chǎng)模式通過(guò) BeanFactory 、ApplicationContext 創(chuàng)建 bean 對(duì)象
(2)代理設(shè)計(jì)模式 : Spring AOP 功能的實(shí)現(xiàn)
(3)單例設(shè)計(jì)模式 : Spring 中的 Bean 默認(rèn)都是單例的
(4)模板方法模式 : Spring 中 jdbcTemplate 、hibernateTemplate 等以Template 結(jié)尾的對(duì)數(shù)據(jù)庫(kù)操作類(lèi),它們就使用到了模板模式
(5)包裝器設(shè)計(jì)模式 : 我們的項(xiàng)目需要連接多個(gè)數(shù)據(jù)庫(kù),而且不同的客戶(hù)在每次訪(fǎng)問(wèn)中根據(jù)需要會(huì)去訪(fǎng)問(wèn)不同的數(shù)據(jù)庫(kù),這種模式讓我們可以根據(jù)客戶(hù)的需求能夠動(dòng)態(tài)切換不同的數(shù)據(jù)源。
(6)觀(guān)察者模式: Spring 事件驅(qū)動(dòng)模型就是觀(guān)察者模式很經(jīng)典的一個(gè)應(yīng)用。
(7)適配器模式:Spring AOP的增強(qiáng)或通知(Advice)使用到了適配器模式,spring MVC中也是用到了適配器模式適配 Controller
(1)spring的核心思想Ioc/DI和aop
(2)使用spring不用處理對(duì)象之間的依賴(lài)關(guān)系,能夠大大的降低我們代碼的耦合度,增加項(xiàng)目的可維護(hù)性
(3)使用spring我們不用關(guān)心對(duì)象是怎么創(chuàng)建的,只需要配置好配置文件或貼注解即可,很大程度簡(jiǎn)化應(yīng)用開(kāi)發(fā)
(4)使用spring能夠?qū)⑴c業(yè)務(wù)無(wú)關(guān)的代碼,,卻為業(yè)務(wù)模塊所共同調(diào)用的邏輯使用aop將其抽象出來(lái),提高代碼可重用性
(5)spring提供與第三方web框架無(wú)縫集成,并且自己也提供一套SpringMVC框架
通過(guò)上述介紹,相信大家對(duì)Spring已經(jīng)有所了解,大家如果對(duì)此比較感興趣,想了解更多相關(guān)知識(shí),不妨來(lái)關(guān)注一下動(dòng)力節(jié)點(diǎn)的Spring教程,里面的課程內(nèi)容細(xì)致全面,通俗易懂,適合小白學(xué)習(xí),希望對(duì)大家能夠有所幫助哦。
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話(huà)與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743