spring 專案載入完立刻執行
阿新 • • 發佈:2019-01-11
我的目的是想在專案載入完畢之後,需要進行一些初始化的動作,比如從資料庫查詢資料,快取起來.
找到了三種方式:
第一種方式
寫一個類,實現BeanPostProcessor,這個介面有兩個方法
(1)postProcessBeforeInitialization方法,在spring中定義的bean初始化前呼叫這個方法;
(2)postProcessAfterInitialization方法,在spring中定義的bean初始化後呼叫這個方法;
這個雖然也能執行,但是是每次載入一個bean都會去執行,不太滿足我的要求,我只需要一次就ok了,但是這個介面針對某個專門的bean有用第二種方式 編寫一個實現ApplicationListener的listener類
@Service
public class StartupListener implements
ApplicationListener<ContextRefreshedEvent > {
public static String ShopNum ;
@Autowired
ShopService shopService;
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
if ( event.getApplicationContext (). getParent() == null) {
// TODO 這裡寫下將要初始化的內容
Shop shopByShopNum = shopService
.getShopByShopNum ("e7-80-2e-e8-6c-a6" );
System.out .println ("----------------------------" );
} }}
親測可用,但是我這個專案用不了,是專案比較特殊,載入了兩次spring MV容器,導致執行兩次,.
- 最後一種方式編寫InitializingBean的實現類
@Service
public class Test implements InitializingBean{
@Autowired
ShopService shopService;
@Override
public void afterPropertiesSet() throws Exception {
Shop shopByShopNum = shopService.getShopByShopNum( "e7-80-2e-e8-6c-a6");
System.out .println ("----------------------------" );
}
}
專案在載入完畢後立刻執行afterPropertiesSet 方法 ,並且可以使用spring 注入好的bean
4.第四種就是servlet,但是他不能使用spring 的bean 還需要手動獲取,比較麻煩.