當tomcat啓動時,由web.xml配置信息中初始化CharsetFilter類和ActionServlet類,啓動順序可由load-on-startup配置。ActionServlet繼承自HttpSetvlet類,由init(SetvletConfig)方法啓動,執行initEasyJWeb()方法進行初始化:
1、讀取配置文件
- 配置文件默認爲WEB-INF/easyjf-web.xml,也可在web.xml中更改配置路徑
<context-param>
<param-name>easyjwebConfigLocation</param-name>
<param-value>/WEB-INF/easyjf-web1.xml,/WEB-INF/easyjf-web2.xml</param-value>
</context-param>
- 讀取得到modules,forms,pages,beans,initApp,interceptors,errorHandler,ajaxConfigManager,全局屬性配置等,保存在webConfig中。
2、初始化容器
- 將所有module另以bean形式保存,在容器中註冊配置的bean並加載及註冊defaultActionPackage中的bean(@Bean註解)以及module(*Action類名),處理module的別名alias。
-
bean的scope有四種方式:
- singleton:在一個應用上下文中,只存在一個該bean的實例。是bean的默認scope,若該bean非lazy則在容器初始化時馬上初始化並註冊到單例容器SingletonBeanContainer中
- prototype:每次請求都重新生成一個新的對象。實例化後返回即用不保存。
- request:在一個請求生命週期內存在
- session:在一個session生命週期內都存在
-
easyjweb內置了IOC容器,根據bean配置信息進行setter注入
- 屬性註解:@Inject(name="xx"),xx默認爲AutoJnjectByType,按照類型注入;若xx="service",則注入name="service"的bean,需要手動配置。@DisInject表示不注入。
- 文件配置:inject屬性有3種none、bytype、byname,module默認爲none,bean默認爲bytype。none表示不注入,bytype按照屬性類型注入,byname注入指定的bean,需要配置相應property。
- 最後用com.easyjf.beans.BeanWrapper實現setter方法注入。
- 容器bean包含三部分:1、單例bean容器SingletonBeanContainer,均已實例化,2、普通bean,註冊在容器中,每次獲得均需要實例化,3、innerContainer,如spring容器中配置的bean,每次查找bean的順序分別是單例bean-->普通bean-->innerContainer
3、初始化其他信息
- 將webConfig、container、ActionServlet保存到FrameworkEngine中,便於調用
- 初始化Ajax服務(保存AjaxConfigManager信息),模板(配置velocity),啓動initApp
4、結束