spring容器載入完成執行某個方法,spring容器載入執行
今天遇到一個問題,需要在項目中加入一個定時器,需要在項目啟動後就執行,所以就在網上找spring容器初始化之後就執行的方法有什麼:
查了很多資料,總共找到了兩個合格方法,都是用了一下之後,結合網上的資訊說說我個人的理解:
1.寫一個類,實現BeanPostProcessor,這個介面有兩個方法:
(1)postProcessBeforeInitialization方法,在spring中定義的bean初始化前調用這個方法;
(2)postProcessAfterInitialization方法,在spring中定義的bean初始化後調用這個方法;
首先,開始我試過這個方法,才發現,這個介面是在spring容器啟動時,每初始化一個bean,便會調用一次,也就是說,你初始化多少個bean,變回調用多少次,當然也就不符合我之前的需求;
2.之後,我找到了另外一個方法,寫一個類,實現InitializingBean介面:
(1)實現這個介面,只要實現afterPropertiesSet()這個方法,將你要預先處理的代碼寫在裡面,spring容器啟動後,就會執行這個裡面的方法。
很明顯,最後一個符合我的需求,我將計時器代碼寫在實現InitializingBean介面的類中afterPropertiesSet()方法裡面。
public class DayTradeTimer implements InitializingBean{/** * */private static final long serialVersionUID = -5173826987102711830L;@SuppressWarnings("deprecation")public void afterPropertiesSet() throws Exception {// TODO Auto-generated method stubDate date = new Date();//每天淩晨兩點執行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 = new Timer();timer.scheduleAtFixedRate(new TimerTask() {@Overridepublic void 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>
spring再tomcat啟動後,初始化完成後,自動執行一次某個類,怎做
用spring 的quartz
怎判斷Spring容器初始化完成?
應該沒問題吧。
@Qualifier("C") ?
確定C的名字正確嗎
如果名字唯一,可以把@Qualifier("C")去掉試試