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