日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

spring mvc原理_Spring常见问题整理

發(fā)布時間:2024/4/11 javascript 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring mvc原理_Spring常见问题整理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一.為什么要使用 spring?

1.Spring簡介

spring 是一個開源的輕量級 JavaBean 容器框架。使用 JavaBean 代替 EJB ,并提供了豐富的企業(yè)應(yīng)用功能,降低應(yīng)用開發(fā)的復雜性。

2.Spring優(yōu)點

1.輕量:非入侵性的、所依賴的東西少、資源占用少、部署簡單,不同功能選擇不同的 jar 組合

2.容器:工廠模式實現(xiàn)對 JavaBean 進行管理,通過控制反轉(zhuǎn)(IOC)將應(yīng)用程序的配置和依賴性與應(yīng)用代碼分開

3.松耦合:通過 xml 配置或注解即可完成 bean 的依賴注入

4.AOP:通過 xml 配置 或注解即可加入面向切面編程的能力,完成切面功能,如:日志,事務(wù)...的統(tǒng)一處理

5.方便集成:通過配置和簡單的對象注入即可集成其他框架,如 Mybatis、Hibernate、Shiro...

6.豐富的功能:JDBC 層抽象、事務(wù)管理、MVC、Java Mail、任務(wù)調(diào)度、JMX、JMS、JNDI、EJB、動態(tài)語言、遠程訪問、Web Service...


二.解釋一下什么是 aop?

1.理解:在運行時,動態(tài)地將代碼切入到類的指定方法、指定位置上的編程思想就是面向切面的編程。

2.優(yōu)勢:使用AOP技術(shù),可以將一些系統(tǒng)性相關(guān)的編程工作,獨立提取出來,獨立實現(xiàn),然后通過切面切入進系統(tǒng)。從而避免了在業(yè)務(wù)邏輯的代碼中混入很多的系統(tǒng)相關(guān)的邏輯——比如權(quán)限管理,事物管理,日志記錄等等。

3.AOP相關(guān)的概念

(1) Aspect :切面,切入系統(tǒng)的一個切面。比如事務(wù)管理是一個切面,權(quán)限管理也是一個切面;

(2)Join point :連接點,也就是可以進行橫向切入的位置;

(3) Advice :通知,切面在某個連接點執(zhí)行的操作(分為: Before advice , After returning advice , After throwing advice , After (finally) advice , Around advice );

(4) Pointcut :切點,符合切點表達式的連接點,也就是真正被切入的地方;

4.AOP 的實現(xiàn)原理

(1)AOP分為靜態(tài)AOP和動態(tài)AOP。

(2)靜態(tài)AOP是指AspectJ實現(xiàn)的AOP,他是將切面代碼直接編譯到Java類文件中。

(3)動態(tài)AOP是指將切面代碼進行動態(tài)織入實現(xiàn)的AOP。


三.解釋一下什么是 ioc?

1.控制反轉(zhuǎn)(IoC)解決的主要問題:為了解決對象之間的耦合度過高的問題

2.什么是控制反轉(zhuǎn)(IoC):借助于“第三方”實現(xiàn)具有依賴關(guān)系的對象之間的解耦,IOC容器相當于整個系統(tǒng)的“粘合劑”,它把系統(tǒng)中的所有對象粘合在一起發(fā)揮作用,如果沒有這個“粘合劑”,對象與對象之間會彼此失去聯(lián)系

舉例:

此時:要想程序正常運轉(zhuǎn),每個齒輪都不能出現(xiàn)問題。

此時:各部件之間沒有耦合關(guān)系,A壞了,B、C、D照常運轉(zhuǎn)。

3.為什么叫控制反轉(zhuǎn)(IOC)

沒有引入IOC容器之前,如圖1所示,對象A依賴于對象B,那么對象A在初始化或者運行到某一點的時候,自己必須主動去創(chuàng)建對象B或者使用已經(jīng)創(chuàng)建的對象B。無論是創(chuàng)建還是使用對象B,控制權(quán)都在自己手上。

引入IOC容器之后,如圖2所示,由于IOC容器的加入,對象A與對象B之間失去了直接聯(lián)系,所以,當對象A運行到需要對象B的時候,IOC容器會主動創(chuàng)建一個對象B注入到對象A需要的地方。

對比可以看出:對象A獲得依賴對象B的過程,由主動行為變?yōu)榱吮粍有袨?#xff0c;控制權(quán)顛倒了,所以叫控制反轉(zhuǎn)


四.spring 有哪些主要模塊?

核心容器(Spring Core)

核心容器提供Spring框架的基本功能。

Spring以bean的方式組織和管理Java應(yīng)用中的各個組件及其關(guān)系。

Spring使用BeanFactory來產(chǎn)生和管理Bean,它是工廠模式的實現(xiàn)。

BeanFactory使用控制反轉(zhuǎn)(IoC)模式將應(yīng)用的配置和依賴性規(guī)范與實際的應(yīng)用程序代碼分開。

應(yīng)用上下文(Spring Context)

Spring上下文是一個配置文件,向Spring框架提供上下文信息。

Spring上下文包括企業(yè)服務(wù),如JNDI、EJB、電子郵件、國際化、校驗和調(diào)度功能。

Spring面向切面編程(Spring AOP)

通過配置管理特性,Spring AOP 模塊直接將面向方面的編程功能集成到了 Spring框架中。所以,可以很容易地使 Spring框架管理的任何對象支持 AOP。

Spring AOP 模塊為基于 Spring 的應(yīng)用程序中的對象提供了事務(wù)管理服務(wù)。通過使用 Spring AOP,不用依賴 EJB 組件,就可以將聲明性事務(wù)管理集成到應(yīng)用程序中。

JDBC和DAO模塊(Spring DAO)

JDBC、DAO的抽象層提供了有意義的異常層次結(jié)構(gòu)

可用該結(jié)構(gòu)來管理異常處理,和不同數(shù)據(jù)庫供應(yīng)商所拋出的錯誤信息。

異常層次結(jié)構(gòu)簡化了錯誤處理,并且極大的降低了需要編寫的代碼數(shù)量,比如打開和關(guān)閉鏈接。

對象實體映射(Spring ORM)

Spring框架插入了若干個ORM框架,從而提供了ORM對象的關(guān)系工具

其中包括了Hibernate、JDO和 IBatis SQL Map等,所有這些都遵從Spring的通用事物和DAO異常層次結(jié)構(gòu)。

Web模塊(Spring Web)

Web上下文模塊建立在應(yīng)用程序上下文模塊之上,為基于web的應(yīng)用程序提供了上下文。所以Spring框架支持與Struts集成,web模塊還簡化了處理多部分請求以及將請求參數(shù)綁定到域?qū)ο蟮墓ぷ鳌?/p>

MVC模塊(Spring Web MVC)

MVC框架是一個全功能的構(gòu)建Web應(yīng)用程序的MVC實現(xiàn)。通過策略接口,MVC框架變成為高度可配置的。MVC容納了大量視圖技術(shù),其中包括JSP、POI等,模型來有JavaBean來構(gòu)成,存放于m當中,而視圖是一個街口,負責實現(xiàn)模型,控制器表示邏輯代碼,由c的事情。Spring框架的功能可以用在任何J2EE服務(wù)器當中,大多數(shù)功能也適用于不受管理的環(huán)境。Spring的核心要點就是支持不綁定到特定J2EE服務(wù)的可重用業(yè)務(wù)和數(shù)據(jù)的訪問的對象,毫無疑問這樣的對象可以在不同的J2EE環(huán)境,獨立應(yīng)用程序和測試環(huán)境之間重用。


五.spring 常用的注入方式有哪些?

1.構(gòu)造方法注入:構(gòu)造方法

2.setter注入:set方法

3.基于注解的注入:@Autowired


六.spring 中的 bean 是線程安全的嗎?

1.結(jié)論: 不是線程安全的

2.原因:容器本身并沒有提供Bean的線程安全策略,因此可以說Spring容器中的Bean本身不具備線程安全的特性。spring bean默認來說,singleton,都是線程不安全的。一般來說他們都是多個組件互相調(diào)用,最終去訪問數(shù)據(jù)庫的。


七.spring 支持幾種 bean 的作用域?

1.singleton :bean在每個Spring ioc 容器中只有一個實例。

2.prototype:一個bean的定義可以有多個實例。

3.request:每次http請求都會創(chuàng)建一個bean,該作用域僅在基于web的Spring ApplicationContext情形下有效。

4.session:在一個HTTP Session中,一個bean定義對應(yīng)一個實例。該作用域僅在基于web的Spring ApplicationContext情形下有效。

5.global-session:在一個全局的HTTP Session中,一個bean定義對應(yīng)一個實例。該作用域僅在基于web的Spring ApplicationContext情形下有效。

缺省的(系統(tǒng)默認狀態(tài))Spring bean 的作用域是Singleton.


八.spring 自動裝配 bean 有哪些方式?

1.如何開啟自動裝配

在Spring框架中,開啟自動裝配,只需要在xml配置文件<bean>中定義“autowire”屬性。

<bean id="A" class="com.xxx.xxx.A" autowire="" />

2.自動裝配的五種方式

(1)no – 缺省情況下,自動配置是通過“ref”屬性手動設(shè)定 。

例如:將person裝配到cutomer中

<bean id="cutomer" class="com.xxx.xxx.Cutomer"><property name="person" ref="cutomer"/></bean><bean id="person" class="com.xxx.xxx.Person"/>

(2)byName - 根據(jù)bean的屬性名稱進行自動裝配(bean通過setter方法進行自動裝配)

(3)byType - 根據(jù)bean的類型進行自動裝配(bean通過setter方法進行自動裝配)

(4)constructor - 類似byType,不過是應(yīng)用于構(gòu)造器的參數(shù)。如果一個bean與構(gòu)造器參數(shù)的類型形同,則進行自動裝配,否則導致異常((bean通過構(gòu)造器方法進行自動裝配))

(5)autodetect - 如果有默認的構(gòu)造器,則通過constructor方式進行自動裝配,否則使用byType方式進行自動裝配。


九.spring 事務(wù)實現(xiàn)方式有哪些?

1.aspectJ AOP實現(xiàn)事務(wù):

2.事務(wù)代理工廠Bean實現(xiàn)事務(wù):

3.注解方式實現(xiàn)事務(wù):


十.說一下 spring 的事務(wù)隔離?

請移步:https://zhuanlan.zhihu.com/p/210831218


十一.說一下 spring mvc 運行流程?

1、 用戶發(fā)送請求至前端控制器DispatcherServlet。

2、 DispatcherServlet收到請求調(diào)用HandlerMapping處理器映射器。

3、 處理器映射器找到具體的處理器(可以根據(jù)xml配置、注解進行查找),生成處理器對象及處理器攔截器(如果有則生成)一并返回給DispatcherServlet。

4、 DispatcherServlet調(diào)用HandlerAdapter處理器適配器。

5、 HandlerAdapter經(jīng)過適配調(diào)用具體的處理器(Controller,也叫后端控制器)。

6、 Controller執(zhí)行完成返回ModelAndView。

7、 HandlerAdapter將controller執(zhí)行結(jié)果ModelAndView返回給DispatcherServlet。

8、 DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器。

9、 ViewReslover解析后返回具體View。

10、DispatcherServlet根據(jù)View進行渲染視圖(即將模型數(shù)據(jù)填充至視圖中)。

11、 DispatcherServlet響應(yīng)用戶。


十二.spring mvc 有哪些組件?

1.SpringMVC中的Servlet的三個層次

(1)HttpServletBean:直接繼承自java的HttpServlet,其作用是將Servlet中配置的參數(shù)設(shè)置到相應(yīng)的屬性;

(2)FrameworkServlet:初始化了WebApplicationContext;

(3)DispatcherServlet初始化了自身的9個組件;

2.什么是Handler

Handler也就是處理器。它直接應(yīng)對著MVC中的C也就是Controller層,它的具體表現(xiàn)形式有很多,可以是類,也可以是方法。在Controller層中@RequestMapping標注的所有方法都可以看成是一個Handler,只要可以實際處理請求就可以是Handler。

3.Spring MVC的9大組件

(1)HandlerMapping(映射)

是用來查找Handler的。在SpringMVC中會有很多請求,每個請求都需要一個Handler處理,具體接收到一個請求之后使用哪個Handler進行處理呢?這就是HandlerMapping需要做的事。

(2) HandlerAdapter(適配器)

SpringMVC中的Handler可以是任意的形式,只要能處理請求就ok,但是Servlet需要的處理方法的結(jié)構(gòu)卻是固定的,都是以request和response為參數(shù)的方法。HandlerAdapter的作用就是將任意形式的Handler,通過使用適配器,可以“轉(zhuǎn)換”成固定形式,然后交給Servlet來處理。每種Handler都要有對應(yīng)的HandlerAdapter才能處理請求。

(3)HandlerExceptionResolver(異常處理)

專門用來對異常情況進行處理,具體來說,此組件的作用是根據(jù)異常設(shè)置ModelAndView,之后再交給render方法進行渲染。HandlerExceptionResolver只能處理頁面渲染之前的異常,頁面渲染過程中的異常,它是不能處理的,這時可以讓容器跳轉(zhuǎn)到指定的錯誤頁面來處理異常。

(4)ViewResolver(視圖解析器)

ViewResolver用來將String類型的視圖名和Locale解析為View類型的視圖。View是用來渲染頁面的,也就是將程序返回的參數(shù)填入模板里,生成html(也可能是其它類型)文件。這里就有兩個關(guān)鍵問題:使用哪個模板?用什么技術(shù)(規(guī)則)填入?yún)?shù)?這其實是ViewResolver主要要做的工作,ViewResolver需要找到渲染所用的模板和所用的技術(shù)(也就是視圖的類型)進行渲染,具體的渲染過程則交由不同的視圖自己完成。

(5)RequestToViewNameTranslator(從request中獲取ViewName)

ViewName是根據(jù)ViewName查找View,但有的Handler處理完后并沒有設(shè)置View也沒有設(shè)置ViewName,這時就需要RequestToViewNameTranslator從request中找到默認的View了。如何從request中獲取ViewName就是RequestToViewNameTranslator要做的事情了。RequestToViewNameTranslator在Spring MVC容器里只可以配置一個,所以所有request到ViewName的轉(zhuǎn)換規(guī)則都要在一個Translator里面全部實現(xiàn)。

(6)LocaleResolver(解析Locale(地理、政治和文化地區(qū)))

解析視圖需要兩個參數(shù):一是視圖名,另一個是Locale。視圖名是處理器返回的,Locale是從哪里來的?這就是LocaleResolver要做的事情。LocaleResolver用于從request解析出Locale,Locale就是zh-cn之類,表示一個區(qū)域,有了這個就可以對不同區(qū)域的用戶顯示不同的結(jié)果。SpringMVC主要有兩個地方用到了Locale:一是ViewResolver視圖解析的時候;二是用到國際化資源或者主題的時候。

(7)ThemeResolver(主題解析)

用于解析主題。SpringMVC中一個主題對應(yīng)一個properties文件,里面存放著跟當前主題相關(guān)的所有資源、如圖片、css樣式等。SpringMVC的主題也支持國際化,同一個主題不同區(qū)域也可以顯示不同的風格。SpringMVC中跟主題相關(guān)的類有 ThemeResolver、ThemeSource和Theme。主題是通過一系列資源來具體體現(xiàn)的,要得到一個主題的資源,首先要得到資源的名稱,這是ThemeResolver的工作。然后通過主題名稱找到對應(yīng)的主題(可以理解為一個配置)文件,這是ThemeSource的工作。最后從主題中獲取資源就可以了。

(8)MultipartResolver(上傳文件解析)

用于處理上傳文件請求。處理方法是將普通的request包裝成MultipartHttpServletRequest,后者可以直接調(diào)用getFile方法獲取File,如果上傳多個文件,還可以調(diào)用getFileMap得到FileName->File結(jié)構(gòu)的Map。此組件中一共有三個方法,作用分別是判斷是不是上傳請求,將request包裝成MultipartHttpServletRequest、處理完后清理上傳過程中產(chǎn)生的臨時資源。

(9)FlashMapManager(管理FlashMap)

用來管理FlashMap的,FlashMap主要用在redirect中傳遞參數(shù)。


十三.@RequestMapping 的作用是什么?

@RequestMapping是一個用來處理請求地址映射的注解,可用于類或者方法上。用于類上,表示類中的所有響應(yīng)請求的方法都是以該地址作為父路徑。

@RequestMapping注解有六個屬性,下面進行詳細的說明。
1.value:指定請求的實際地址,指定的地址可以是URI Template模式。
2.method:指定請求的method類型,GET、POST、PUT、DELETE等。
3.consumes:指定處理請求的提交內(nèi)容類型(Content-Type),例如application/json,text/html。
4.produces:指定返回的內(nèi)容類型,僅當request請求頭中的(Accept)類型中包含該指定類型才返回。
5.params:指定request中必須包含某些參數(shù)值才讓該方法處理。
6.headers:指定request中必須包含某些指定的header值,才能讓該方法處理請求。


十四.@Autowired 的作用是什么?

@Autowired 它可以對類成員變量、方法及構(gòu)造函數(shù)進行標注,完成自動裝配的工作,通過@Autowired 的使用來消除 set/get 方法。


十五、你怎么理解spring的di

1.di依賴注入:描述對象之間的依賴關(guān)系 在spring工廠中設(shè)值注入或者構(gòu)造注入維護關(guān)系


十六、spring中@Autowired和@Resource的區(qū)別是什么

1. @Autowired與@Resource都可以用來裝配bean. 都可以寫在字段上,或?qū)懺趕etter方法上。

2.@Autowired默認按byType注入,byName需要與@Qualifier("對象名")連用。

@Resource同時支持byType和byName注入,默認按byName注入,如果默認情況下找不到就按類型找(name屬性解析為bean的名字,而type屬性則解析為bean的類型)

3.@Autowired是spring提供的注釋,@Resource是JAVA2EE提供的。

總結(jié)

以上是生活随笔為你收集整理的spring mvc原理_Spring常见问题整理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。