?
核心容器由核心,Bean输涕,上下文和表達(dá)式語(yǔ)言模塊組成盐数,它們的細(xì)節(jié)如下:
核心模塊提供了框架的基本組成部分,包括IoC 和依賴(lài)注入功能姑隅。
Bean 模塊提供 BeanFactory写隶,它是一個(gè)工廠(chǎng)模式的復(fù)雜實(shí)現(xiàn)。
上下文模塊建立在由核心和Bean 模塊提供的堅(jiān)實(shí)基礎(chǔ)上讲仰,它是訪(fǎng)問(wèn)定義和配置的任何對(duì)象的媒介慕趴。ApplicationContext 接口是上下文模塊的重點(diǎn)。Context就是一個(gè)Bean關(guān)系的集合,這個(gè)關(guān)系集合又叫Ioc容器冕房,一旦建立起這個(gè)Ioc容器后Spring就可以為你工作了躏啰。
表達(dá)式語(yǔ)言模塊在運(yùn)行時(shí)提供了查詢(xún)和操作一個(gè)對(duì)象圖的強(qiáng)大的表達(dá)式語(yǔ)言。
Beanfactory容器
[if !supportLists]·?[endif]
第一步利用框架提供的?XmlBeanFactory()API去生成工廠(chǎng) bean 以及利用?ClassPathResource()API去加載在路徑 CLASSPATH 下可用的 bean 配置文件耙册。XmlBeanFactory()API負(fù)責(zé)創(chuàng)建并初始化所有的對(duì)象给僵,即在配置文件中提到的 bean。
[if !supportLists]·?[endif]
[if !supportLists]·?[endif]第二步利用第一步生成的bean工廠(chǎng)對(duì)象的?getBean()方法得到所需要的 bean详拙。 這個(gè)方法通過(guò)配置文件中的 bean ID 來(lái)返回一個(gè)真正的對(duì)象帝际,該對(duì)象最后可以用于實(shí)際的對(duì)象。一旦得到這個(gè)對(duì)象饶辙,就可以利用這個(gè)對(duì)象來(lái)調(diào)用任何方法胡本。
ApplicationContext容器
[if !supportLists]·?[endif]
第一步生成工廠(chǎng)對(duì)象。加載完指定路徑下bean配置文件后畸悬,利用框架提供的?FileSystemXmlApplicationContextAPI去生成工廠(chǎng) bean侧甫。FileSystemXmlApplicationContext負(fù)責(zé)生成和初始化所有的對(duì)象,比如蹋宦,所有在 XML bean 配置文件中的 bean披粟。
[if !supportLists]·?[endif]
[if !supportLists]·?[endif]第二步利用第一步生成的上下文中的getBean()方法得到所需要的 bean。 這個(gè)方法通過(guò)配置文件中的 bean ID 來(lái)返回一個(gè)真正的對(duì)象冷冗。一旦得到這個(gè)對(duì)象守屉,就可以利用這個(gè)對(duì)象來(lái)調(diào)用任何方法。
DispatcherServelet是前端控制器HandlerAdapter相當(dāng)于controller,DispatcherServelet調(diào)用各種HandlerAdapter來(lái)實(shí)現(xiàn)任務(wù)分發(fā)給相關(guān)的業(yè)務(wù)邏輯HandlerInterceptor是一個(gè)接口蒿辙,可以用來(lái)在Handler調(diào)用之前拇泛,之后,以及view呈現(xiàn)后可以做很多事情HandlerMapping是負(fù)責(zé)確定DispatcherServelet與controller之間映射的類(lèi)思灌,告訴DispatcherServelet俺叭,在請(qǐng)求到來(lái)后,由哪個(gè)controller來(lái)響應(yīng)這個(gè)請(qǐng)求
SpringMVC:
運(yùn)行原理:
[if !supportLists]1.?[endif]客戶(hù)端請(qǐng)求提交到DispatcherServlet
[if !supportLists]2.?[endif]由DispatcherServlet控制器查詢(xún)一個(gè)或多個(gè)HandlerMapping泰偿,找到處理請(qǐng)求的Controller
[if !supportLists]3.?[endif]DispatcherServlet將請(qǐng)求提交到Controller
[if !supportLists]4.?[endif]Controller調(diào)用業(yè)務(wù)邏輯處理后熄守,返回ModelAndView
[if !supportLists]5.?[endif]DispatcherServlet查詢(xún)一個(gè)或多個(gè)ViewResoler視圖解析器,找到ModelAndView指定的視圖
[if !supportLists]6.?[endif]視圖負(fù)責(zé)將結(jié)果顯示到客戶(hù)端
處理器是你的應(yīng)用中注解了@Controller和@RequestMapping的類(lèi)和方法
設(shè)計(jì)原則則是“對(duì)擴(kuò)展開(kāi)放耗跛,對(duì)修改閉合”裕照。
contex????5?