在文章pe框架簡介2--web.xml中庄拇,web.xml中的<servlet>標(biāo)簽標(biāo)明了創(chuàng)建Servlet實例的java類:MainServlet。這樣在web應(yīng)用啟動時韭邓,會創(chuàng)建Servlet實例措近,實例化并調(diào)用MainServlet.init()方法。
init()方法的重點如下:
1女淑、首先調(diào)用a()方法瞭郑,加載pe-configs.xml配置文件。a()方法詳解如下:
2鸭你、之后調(diào)用?initWebApplicationContext() 方法屈张,可以看出擒权,最終調(diào)用的是Spring本身的refresh()方法,該方法的解詳見:最詳細(xì)的Spring核心IOC的源碼分析(每次看都有不同的感悟)阁谆。通過該方法創(chuàng)建 Bean 容器碳抄,加載并注冊Bean。
通過啟動日志(如下)场绿,我們也可以看出項目中使用XmlWebApplicationContext作為BeanFactory剖效。而對于Spring,默認(rèn)采用DefaultListenableBeanFactory(類圖見下)來實例化容器焰盗。
Servlet with name 'Dispatcher1' will try to create custom WebApplicationContext context of class 'org.springframework.web.context.support.XmlWebApplicationContext' using parent context [null]
3贱鄙、bean實例化完之后調(diào)用 如下方法,完成后續(xù)操作姨谷。調(diào)用方法打印日志如下圖所示逗宁。
this.goto =this.if();//配置文件上傳??multipartResolver
this.do =this.for();//配置國際地區(qū),語言??localeResolver
this.char =this.do();//配置視圖解析??mainViewResolver
this.int =this.a();//加載主控制器mainController
4瞎颗、至此,項目已經(jīng)啟動
5捌议、項目啟動后哼拔,進(jìn)行客戶端訪問,.do文件會調(diào)用MainServlet中的doGet() 或者?doPost()方法瓣颅,這兩個方法最終都會調(diào)用this.a()方法倦逐,而this.a()通過:var5 =this.int.process(var1, var2, var7);? (其中int指主控制器mainController,)調(diào)用mainController.process();