WEB啟動時,如何載入spring容器和struts2容器(bean的注入和url如何請求)
阿新 • • 發佈:2018-12-30
整合原理
整合原理:
* web.xml
* spring容器是以監聽器的形式與tomcat整合的
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name> contextConfigLocation</param-name>
<param-value>classpath:spring/applicationContext.xml</param-value>
</context-param>
* 以過濾器的形式整合struts2容器
* <filter>
<filter-name>struts2</filter-name>
<filter-class > org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
ContextLoaderListener 說明:
- ContextLoaderListener 當中的createContextLoader()載入spring的web容器
- initWebApplicationContext
* 初始化spring的web容器
* 載入其配置檔案 - 當執行完這兩個方法以後,就啟動spring的web容器了,在spring容器中,單例模式的
bean就被例項化了,所以dao和service層的物件和代理物件就在這個時候產生了
在tomcat啟動的時候,幹了兩件事情:
- 載入了各種配置檔案
- 靜態注入了一些bean
當發出 url 請求時 請求url:personAction_savePerson.action
步驟
* 先找struts的配置檔案,會找根據struts2的相關配置查詢action的建立方式
* 會去常量struts.objectFactory查詢到底是由哪個類建立了action
* 會去struts-default.xml,struts-plugin.xml,struts.xml檔案去找struts.objectFactory
* 哪個配置檔案載入在最後,哪個決定
* 最後在struts和spring整合的包中找到了struts-plugin.xml檔案
* <bean type="com.opensymphony.xwork2.ObjectFactory"
* name="spring" class="org.apache.struts2.spring.StrutsSpringObjectFactory" />
<constant name="struts.objectFactory" value="spring" />
* 由上述的內容可以知道,action是由StrutsSpringObjectFactory建立的,而該類繼承了SpringObjectFactory
該原始碼中beanName就是struts2配置檔案中的action元素的class屬性的值,這就意味著
class屬性的值要和spring容器中action所在的bean所指定的id值要一致
如下圖