Spring中ApplicationContext加載機制

詳見:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp33

加載器目前有兩種選擇:ContextLoaderListener和ContextLoaderServlet。
?? 這兩者在功能上完全等同,只是一個是基于Servlet2.3版本中新引入的Listener接口實現,而另一個基于Servlet接口實現。開發中可根據目標Web容器的實際情況進行選擇。

配置非常簡單,在web.xml中增加:
<listener>
?????? <listener-class>
????????? org.springframework.web.context.ContextLoaderListener
?????? </listener-class>
</listener>
或:
<servlet>
???????? <servlet-name>context</servlet-name>
???????? <servlet-class>
?????????? org.springframework.web.context.ContextLoaderServlet
???????? </servlet-class>
???????? <load-on-startup>1</load-on-startup>
</servlet>
通過以上配置,Web容器會自動加載/WEB-INF/applicationContext.xml初始化
ApplicationContext實例,如果需要指定配置文件位置,可通過context-param加以指定:
<context-param><param-name>contextConfigLocation</param-name>??????? <param-value>classpath:applicationContext-bean.xml,classpath:spring-jamon.xml</param-value> </context-param>
配置完成之后,即可通過
WebApplicationContextUtils.getWebApplicationContext方法在Web應用中獲取ApplicationContext引用。
如:ApplicationContext ctx=WebApplicationContextUtils.getWebApplicationContext();
???????? LoginAction action=(LoginAction)ctx.getBean("action");
-------------------------------------------------------------------------------------------
spring為ApplicationContext提供有多種實現(舉例)
spring為ApplicationContext提供的3種實現分別為:ClassPathXmlApplicationContext,FileSystemXmlApplicationContext和XmlWebApplicationContext,其中XmlWebApplicationContext是專為Web工程定制的。使用舉例如下:
?? 1. FileSystemXmlApplicationContext
????? eg1.ApplicationContext ctx = new FileSystemXmlApplicationContext("bean.xml"); //加載單個配置文件
????? eg2.String[] locations = {"bean1.xml", "bean2.xml", "bean3.xml"};
????????? ApplicationContext ctx = new FileSystemXmlApplicationContext(locations ); //加載多
個配置文件
eg3.ApplicationContext ctx =new FileSystemXmlApplicationContext("D:/project/bean.xml");//根據具體路徑加載文件
注:
(1)這種方式適用于采用Spring框架的獨立應用程序,需要程序通過配置文件手工初始化Spring的情況。
(2)獲取失敗時拋出異常。
? 2. ClassPathXmlApplicationContext
????? eg1.ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");
????? eg2.String[] locations = {"bean1.xml", "bean2.xml", "bean3.xml"};
?????????? ApplicationContext ctx = new ClassPathXmlApplication(locations);
注:
(1).其中FileSystemXmlApplicationContext和ClassPathXmlApplicationContext與BeanFactory的xml文件定位方式一????? 樣是基于路徑的。

3. XmlWebApplicationContext
??? eg1.ServletContext servletContext = request.getSession().getServletContext();???
??????????? ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);
注 :
(1)一般是 ApplicationContext ctx =
WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());
(2)獲取失敗時返回null。
(3)這種方式適合于采用Spring框架的B/S系統,通過ServletContext對象獲取ApplicationContext對象,然后在通過它獲取需要的類實例。
4.繼承自抽象類ApplicationObjectSupport
說明:抽象類ApplicationObjectSupport提供getApplicationContext()方法,可以方便的獲取到ApplicationContext。
Spring初始化時,會通過該抽象類的setApplicationContext(ApplicationContext context)方法將ApplicationContext 對象注入。
5.繼承自抽象類WebApplicationObjectSupport
說明:類似上面方法,調用getWebApplicationContext()獲取WebApplicationContext
6.實現接口ApplicationContextAware
說明:實現該接口的setApplicationContext(ApplicationContext context)方法,并保存ApplicationContext 對象。
Spring初始化時,會通過該方法將ApplicationContext對象注入。
實現方法:
public void setApplicationContext(ApplicationContext arg0) throws BeansException {
??????? applicationContext = arg0;???
??? }
獲取bean:
ITaskService bean = (ITaskService)applicationContext.getBean(taskServiceName);

參考:
1 http://hi.baidu.com/fyears/blog/item/e2f689afd05216ce7dd92a37.html
2. http://www.blogjava.net/Todd/archive/2010/04/22/295112.html

轉載于:https://www.cnblogs.com/grefr/p/5046337.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/256258.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/256258.shtml
英文地址,請注明出處:http://en.pswp.cn/news/256258.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Codeforces 724 C. Ray Tracing

Codeforces 724 C. Ray Tracing 題目來源 codeforces 題意&#xff1a; 有一些傳感器按輸入坐標分布在圖上&#xff0c;有一道光從(0,0)沿45角出射&#xff0c;遇到邊按反射法則反射&#xff0c;遇到角落結束。 問每一個點被經過的時間&#xff0c;并按照輸入順序輸出。題解&am…

CDN架構以及原理分析

詳見&#xff1a; http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp61 在不同地域的用戶訪問網站的響應速度存在差異,為了提高用戶訪問的響應速度、優化現有Internet中信息的流動,需要在用戶和服務器間加入中間層CDN. 使用戶能以最快的速度&#xff0c;從最接近用…

基于VS2019的Eigen庫安裝詳解

概念 Eigen是一個C開源線性代數庫&#xff0c;以提供有關矩陣的的線性代數運算&#xff0c;解方程等功能。Eigen在很多領域如信號處理&#xff0c;圖像處理&#xff0c;深度學習等起到重要作用&#xff0c;學習其操作方法&#xff0c;可以靈活的對線性代數、矩陣和矢量將進行計…

【圖像處理】——Python圖像分割邊緣檢測算法之二階梯度算子(laplace、log、dog算子)

目錄 一、二階算子簡介 二、laplace(拉普拉斯算子) 1、什么是拉普拉斯算子

C#中不常見的運算符功能匯總

介紹 C#有很多運算符&#xff0c;可分為以下幾種&#xff1a;算數運算符&#xff0c;比較運算符&#xff0c;條件運算符&#xff0c;賦值運算符&#xff0c;邏輯運算符。下面對不常見的運算符進行匯總。 概念 條件運算符 ?(可空類型修飾符) 引用類型可以使用空引用表示一…

SQL Server2012中如何通過bak文件還原SQL Server2012數據庫

1 登陸完數據庫后&#xff0c;不要新建數據庫&#xff0c;直接點擊“數據庫”然后右擊"還原數據庫"。 2 在"源"選項中選擇"設備"。 3 選擇相應的bak文件并進行添加。 4 添加完之后點擊確定&#xff0c;注意在目標這一欄中數據庫名稱都可以不用寫…

【圖像處理】——Python OpenCV實現形態學膨脹、腐蝕開閉操作(可以用于圖像濾波、圖像分割等)

轉載博客請注明詳細地址,謝謝本文講了形態學基本操作膨脹腐蝕開閉操作的原理本文講解了用OpenCV-Python實現形態學操作目錄 一、形態學簡述 1、簡介 2、一些基本定義 3、結構元素

thrift服務windows環境編譯失敗

為什么80%的碼農都做不了架構師&#xff1f;>>> 修改maven的pom文件 <!--thrift服務 api 層&#xff0c;開發時 windows系統需指定exe程序位置--> <properties> <thrift.exe.path>E:/Thrift/thrift-0.9.3.exe</thrift.exe.path&g…

編譯包含Google Play服務App的SDK版本問題

編譯包含Google Play服務App的SDK版本問題 錯誤信息&#xff1a;No Resouce identifier found for attribute ‘touchscreen BlocksFocus’ in package ‘android’這個錯誤通常是App引用了Google Play時候發生。Xamarin編譯該類App&#xff0c;需要目標SDK版本必須是21或者更高…

《第一行代碼》學習筆記35-服務Service(2)

1.Android的UI線程不安全&#xff0c;想要更新應用程序里的UI元素&#xff0c;則須在主線程中進行&#xff0c;否則會出現異常。 2.Android不允許在子線程里進行UI操作&#xff0c;對于該情況&#xff0c;Android提供了一套異步消息處理機制&#xff0c;完美解決在子線程中進行…

C#中HP-Socket通信組件詳解

概念 HP-Socket 是國產的TCP、UDP和HTTP 通信框架&#xff0c;包含服務端、客戶端和 Agent 組件&#xff0c;提供 C/C、C#、Java、Python 等多種編程語言接口。 與傳統TCP通訊區別的是HP-Socket 對通信層做到了完全封裝&#xff0c;程序不必關注通信層的任何細節&#xff1b;H…

mail發送的內容顯示為附件的解決辦法

利用命令: cat data.mail | mail -v -s "mail test" xxxqq.com 發送的內容在收件箱中顯示為附件tcmimi.xxx.bin. 這是因為mail期望文件輸入的是unix格式的文本,也就是說換行符使用\n而不是\r\n,如果文本中包含\r(使用set list,顯示為^M),這種情況下mail會認為該文件…

【圖像處理】——Python+opencv實現二值圖像的輪廓邊界跟蹤以及輪廓面積周長的求解(findcontours函數和contourArea函數)

目錄 一、函數 cv.findContours 二、輪廓層級(返回參數hierarchy) 三、輪廓尋找方式 1. RETR_LIST 2. RETR_TREE

基于C#的ico圖標制作與應用

一、簡介 ICO是什么 ICO 是 Windows 開發的一種圖標格式&#xff0c;是一種可以存儲多張圖案、多尺寸、多色板的圖標文件。 一般用IcoFX軟件來創建或修改ico文件。 點擊下載 Ico文件創建與應用 1.單擊打開按鈕&#xff0c;選擇一個圖像文件&#xff0c;確定后一般出現以下…

第5章--高級數據管理

5.1 數值和字符處理函數 常用的數學函數 統計函數 例子&#xff1a; > x <- c(1,2,3,4,5,6,7,8) > mean(x) [1] 4.5 > sd(x) [1] 2.44949 默認情況下&#xff0c;函數scale()對矩陣或數據框的指定列進行均值為0、標準差為1的標準化&#xff1a; newdata <- scal…

在思科無線控制器上查看5GHz和2.4GHz的客戶端數量

在圖形界面下找了好長時間也沒有看到在哪里&#xff0c;在CLI界面下找到了相應的命令&#xff0c;命令如下&#xff1a; (Cisco Controller) >show client ap 802.11a allMAC Address AP Id Status WLAN Id Authenticated ----------------- ------ -…

【圖像處理】——實現二值圖像的輪廓邊界跟蹤以及輪廓面積周長的求解(connectedComponentsWithStats()函數和connectedComponents()函數)

目錄 一、cv2.connectedComponents() 函數原型: 輸入參數解析: 返回參數解析: 二、cv2.connectedC

Halcon閾值分割方法簡析

1. 基于直方圖的自動閾值分割 1.1 關鍵算子 auto_threshold(Image : Regions : Sigma : )&#xff1a;使用多閾值分割單通道圖像。 首先&#xff0c;計算圖像的灰度直方圖。 然后&#xff0c;使用標準差為Sigma的一維高斯濾波器對直方圖進行濾波。 進而&#xff0c;從直方圖中…

GSM BTS Hacking: 利用BladeRF和開源BTS 5搭建基站

GSM BTS Hacking: 利用BladeRF和開源BTS 5搭建基站 引文 如果你已經購買了Nuand&#xff08;官方&#xff09;BladeRF x40&#xff0c;那么就可以在上面運行OpenBTS并可以輸入一些指令來完成一些任務。一般來說HackRF&#xff0c;是一款覆蓋頻率最寬的SDR板卡。它幾乎所有的信息…

夜深人靜,想規劃一下短期

截止寫到這里的時候&#xff0c;已經是農歷的十一月初六了&#xff0c;算算時間&#xff0c;距離過年也不太遙遠了。就只有短短50多天左右。 很多事想做沒有時間&#xff0c;很多程序要改&#xff0c;沒有時間&#xff1b;很多想法想付諸行動&#xff0c;總是半途而廢。時間久這…