spring容器載入完成執行某個方法
阿新 • • 發佈:2019-01-05
http://www.mincoder.com/article/1812.shtml
今天遇到一個問題,需要在專案中加入一個定時器,需要在專案啟動後就執行,所以就在網上找spring容器初始化之後就執行的方法有什麼:
查了很多資料,總共找到了兩個符合條件的方法,都是用了一下之後,結合網上的資訊說說我個人的理解:
1.寫一個類,實現BeanPostProcessor,這個介面有兩個方法:
(1)postProcessBeforeInitialization方法,在spring中定義的bean初始化前呼叫這個方法;
(2)postProcessAfterInitialization方法,在spring中定義的bean初始化後呼叫這個方法;
首先,開始我試過這個方法,才發現,這個介面是在spring容器啟動時,每初始化一個bean,便會呼叫一次,也就是說,你初始化多少個bean,變回呼叫多少次,當然也就不符合我之前的需求;
2.之後,我找到了另外一個方法,寫一個類,實現InitializingBean介面:
(1)實現這個介面,只要實現afterPropertiesSet()這個方法,將你要預處理的程式碼寫在裡面,spring容器啟動後,就會執行這個裡面的方法。
很明顯,最後一個符合我的需求,我將計時器程式碼寫在實現InitializingBean介面的類中afterPropertiesSet()方法裡面。
public classDayTradeTimerimplementsInitializingBean{/**
*
*/privatestaticfinallong serialVersionUID =-5173826987102711830L;@SuppressWarnings("deprecation")publicvoid afterPropertiesSet()throwsException{// TODO Auto-generated method stubDate date =newDate();//每天凌晨兩點執行if((date.getHours()==2&& date.getMinutes ()>0)||(date.getHours()>2)){
date.setDate(date.getDate()+1);}
date.setHours(2);
date.setMinutes(0);
date.setSeconds(0);Timer timer =newTimer();
timer.scheduleAtFixedRate(newTimerTask(){@Overridepublicvoid run(){// TODO Auto-generated method stubSystem.out.println("***********計時器*****************");}}, date,1000*60*60*24);}}
最後,再貼一個servlet在web容器啟動時執行的方法
<servlet><servlet-name>myServlet</servlet-name><servlet-class>com.servlet.MyServlet</servlet-class><load-on-startup>1</load-on-startup><!--加這個標籤,tomcat啟動時會自動載入指定的servlet,值是servlet的載入順序, 數字越小代表載入的優先順序越高--></servlet>