1. 程式人生 > >spring容器載入完成執行某個方法

spring容器載入完成執行某個方法

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>