1. 程式人生 > >在程式中用new ClassPathXmlApplicationContext()的注意事項

在程式中用new ClassPathXmlApplicationContext()的注意事項

問題背景:在我們的web程式中,用spring來管理各個例項(bean), 有時在程式中為了使用已被例項化的bean, 通常會用到這樣的程式碼:

	ApplicationContext appContext = 
	     	  new ClassPathXmlApplicationContext("classpath:META-INF/spring/applicationContext-common.xml");
		ApplicationContext appContext=appContextUtil.getContext();
		ProjectServiceFacade projectServiceFacade=(ProjectServiceFacade)appContext.getBean("biz.projectServiceFacade");
	

上述的程式碼會帶來一個問題:因為它會重新裝載applicationContext-common.xml並例項化上下文bean, 如果有些執行緒配置類也是在這個配置檔案中,那麼會造成做相同工作的的執行緒會被啟兩次。一次是web容器初始化時啟動,另一次是上述程式碼顯示的例項化了一次。這在業務上是要避免的。

解決方法:不用類似new ClassPathXmlApplicationContext()的方式,從已有的spring上下文取得已例項化的bean。

具體步驟:1)增加一個ApplicationContextUtil類,用來取得上下文ApplicationContext

public class ApplicationContextUtil implements ApplicationContextAware {

	private  ApplicationContext context;//宣告一個靜態變數儲存
	@Override
	public void setApplicationContext(ApplicationContext applicationContext)
			throws BeansException {
		this.context=applicationContext;
	}

	public  ApplicationContext getContext(){
		  return context;
	}
}


2) 對ApplicationContextUtil類增加 Spring配置,讓Spring完成此工具類的裝載並且完成applicationcontext上下文的注入;applicationContext-common.xml配置如下:

//初始化appliationUtil類,並完成ApplicationContext的注入
<bean id="applicationContextUtil" class="com.service.utils.ApplicationContextUtil"></bean>
//對業務類注入ApplicationContextUtil例項
<bean id="workSignCheckJob" class="com.service.tools.quartz.WorkSignCheckJob" >
  <property name="appContextUtil" ref="applicationContextUtil" /> 
 </bean>
 

3)業務類呼叫程式碼如下:

 ApplicationContext appContext=appContextUtil.getContext();
  ProjectServiceFacade projectServiceFacade=(ProjectServiceFacade)appContext.getBean("biz.projectServiceFacade");
     WorkSignService workSignService=(WorkSignService)appContext.getBean("biz.workSignService"); 

相關推薦

程式中用new ClassPathXmlApplicationContext()的注意事項

問題背景:在我們的web程式中,用spring來管理各個例項(bean), 有時在程式中為了使用已被例項化的bean, 通常會用到這樣的程式碼: ApplicationContext appContext = new ClassPathXmlAppli

程式中用new ClassPathXmlApplicationContext()獲取Spring的上下文環境注意事項

問題背景:在我們的web程式中,用spring來管理各個例項(bean), 有時在程式中為了使用已被例項化的bean, 通常會用到這樣的程式碼: ApplicationContext appContext =              new ClassPathXm

在程序中用new ClassPathXmlApplicationContext()的註意事項

highlight pat tro ext pri .get color board service 問題背景:在我們的web程序中,用spring來管理各個實例(bean), 有時在程序中為了使用已被實例化的bean, 通常會用到這樣的代碼: [java] view

【微信小程式】scroll-view 注意事項

之前用到scroll-view的時候踩過一次坑,解決後,覺得不是什麼很深的坑,遂沒有做記錄,結果這次又用到了,同一個坑又掉進去一次,心裡很難受,難受我沒長腦子,也難受我眼高手低,所以這一次,我決定記錄下來,給自己一個警醒!   橫向滑動注意事項: 1、scroll-view

Log4Net在VS開發程式中的應用注意事項

本人開發是參考的部落格http://www.cnblogs.com/kissazi2/p/3393595.html 作者寫的很全,很詳細,遇到的問題如下: 示例中LogHelper.cs類中有如下程式碼: public static readonly log4net.ILog lo

程式開發小遊戲注意事項

今天研究小遊戲開發,總結了一些自己遇到的問題 : 一. 註冊appId        用小程式開發的小遊戲跟用小程式開發其他專案不是公用的一個appId        如果你現在的小程式賬號已經選了別的類目(非遊戲),那你就需要另外註冊一個賬號來單獨申請小遊戲appId

微信小程式開發流程以及注意事項

三、獲取appid:“設定”-“開發設定”  四、開啟“微信開發者工具”,新建專案 五、進入到專案首頁 六、程式碼構成 自動生成的目錄結構如下: ├── pages | ├── index | | ├── inde

程式設計師工作交接注意事項

做為一個程式設計師,難免會碰上因同事離職接手新系統,如果碰巧你又是這家公司的新人,在業務不熟悉的情況下,需要考慮哪些事項呢。 1. 文件資料。 雖然大多數系統文件資料匱乏,但以下資料是必須的。 應用程式部署圖:應用程式(或服務)部署在那臺伺服器上,和其相關的伺服器有哪些?比

Android中用命令列檢視內嵌資料庫SQLite3的一些注意事項

進入手機模擬器的shell環境    連線好手機模擬器後,通過Android Studio的Teminal終端直接進入shell環境          adb shell //進入手機模擬器的shell環境 s

Vue.js中用v-bind繫結class的注意事項

此處樣式class的名稱必須加上引號,否則會將其當做物件的屬性,從而使得初始化報錯。 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>vue關於cl

程式通過 url 向內嵌 H5 傳參注意事項

當在小程式中通過 url 向 <web-view> 內嵌的 H5 傳參時,當包含特殊字元時需要進行編碼處理(不然 <web-view> 中是拿不到值的,小程式竟然沒有錯誤提示...): 1、test.wxml <view> <web-view src="

三週學會小程式第一講:小程式申請和注意事項

註冊 註冊郵箱 個人申請小程式非常簡單,首先你需要註冊一個全新的郵箱。 當然用你的個人郵箱也可以,小編考慮到後面你可以再次開發自己的小程式,所以這裡還是重新申請一個比較好。網易郵件一個手機號可以申請15個郵箱,是一個不錯的選擇 註冊小程式 進入 https://mp.weixin.qq.com/ 頁面

程式成長之路_給頁面新增tabBar 和 新增tabBar時的注意事項 (三)

上篇部落格我們已經成功建立頁面,並且顯示我們自己所建立頁面的內容,那麼我們都知道每個專案下面都會有tab bar,當然大部分都有,也不排除沒有的情況啊,那麼這篇我主要是來新增一個tabBar並且 總結一下寫的過程中一個小程式 小白開發者遇到讓人頭疼的問題,並講解解決方法,也許

程式 canvas注意事項(1)

在畫網路圖片時,需要先將圖片下載到本地,需要新增下載域名,在下載成功之後再進行畫圖操作,需要注意非同步下載問題,可以使用await async等框架,也可以使用callback,下面是個小例子: //

程式web-view頁面巢狀pdf.js網頁注意事項

近段時間使用小程式開發時,有一個使用說明模組需要用pdf.js來展示PDF內容。 在安卓中是可以正常顯示的,在IOS中會報無法讀取PDF檔案的錯誤。 解決方法:web-view連結到一個過渡頁面         var u = navigator.userAgent;    

微信小程式之購物車和父子元件傳值及calc的注意事項

在做微信小程式時,覺得小組裡對購物車的實現不是很完美,就自己嘗試的寫了下,然後用到了父子元件傳值,父子元件傳值的話,和vue框架上是非常相似的,以及calc這個css函式,calc有個注意點,自己不怎麼用,一時間有差點忘了,這裡記錄下 1.效果圖 2.子元件實現

FPGA nios編寫LCD12864的驅動程式過程以及注意事項,本人親自踩坑,重要!!!

LCD12864引腳如下: FPGA開發板得提供,3.3v電壓,5v電壓,普通io都是3.3v電壓 DB:資料腳,得用雙向io,因為程式裡面需要讀取液晶的應答(普通io3.3v可以) E: 輸出引

程式設計師找工作的個人經驗教訓以及注意事項

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!                                                                                                

程式設計師創業注意事項

儘量不做自己不擅長的領域 一些創業專案與創業者自身工作無關或興趣完全無關的行業領域,似乎覺得找到了一個行業的痛點,想著只要自己想出來的這個點子去做一個網站或APP就能撬動整個市場,甚至夢想著成為下一個獨角獸公司。但這是創業中第一個也是最大的坑,當你的創業點子誕生時可能就已經註定了它的失敗

程式學習之路:注意事項統計

這篇文章記載在小程式的一些注意事項和遇到的bug,包括解決方案 子控制元件點選事件和父控制元件之間的傳遞 當一個view裡面包裹了了一個子view(如text控制元件),然後兩個控制元件都新增點選事件,如何讓點選text的時候父view的點選事件不觸發呢?  在點選事件t