也許我們會(huì)碰到這樣的場(chǎng)景: 我們想在Spring的所有Bean初始化完畢之后執(zhí)行一些Bean的init操作 如果我們基于Spring開發(fā)Application,那么我們可能的做法就是,在調(diào)用Spring初始化完畢之后接著去寫我們的代碼來(lái)初始化 如果我們基于Spring開發(fā)Web,那么我們很可能自定義一個(gè)Listener,放在Spring的Listener之后去完成我們的初始化。 無(wú)論是哪種,我們都需要從Spring獲取我們的Bean,然后調(diào)用Bean的init方法 其實(shí),(-------------------------華麗的分割線-------------------) 我們可以借助Spring的事件去完成我們的場(chǎng)景。具體如下: 我們可能會(huì)定義這樣一個(gè)借口: Java代碼 public interface Initializable { public void init(); } 我們希望所有需要init的Bean都實(shí)現(xiàn)這個(gè)借口,然后我們?cè)赟pringBean初始化之后統(tǒng)一去init Spring Bean初始化的Event是:ContextRefreshedEvent,我們寫一個(gè)Listener去監(jiān)聽(tīng)這個(gè)Event,代碼如下: Java代碼 @Component public class Initor implements ApplicationListener { @Autowired(required=false) List<Initializable> initors; @Override public void onApplicationEvent(ApplicationEvent event) { if(null==initors) { return; } if(event instanceof ContextRefreshedEvent) { for(Initializable initor:initors) { initor.init(); } } } } 當(dāng)Spring的Context初始化完成之后就會(huì)觸發(fā)ContextRefreshedEvent,此時(shí)我們根據(jù)這個(gè)判斷,去完成我們的init 有興趣的同學(xué)可以去看看其他的幾種事件: ContextClosedEvent----------Context關(guān)閉時(shí)的事件 ContextStartedEvent---------Context啟動(dòng)后的事件 ContextStoppedEvent--------Context停止后的事件 |
聯(lián)系客服