1. 程式人生 > >spring 專案載入完立刻執行

spring 專案載入完立刻執行

我的目的是想在專案載入完畢之後,需要進行一些初始化的動作,比如從資料庫查詢資料,快取起來.

找到了三種方式:

  1. 第一種方式
    寫一個類,實現BeanPostProcessor,這個介面有兩個方法
    (1)postProcessBeforeInitialization方法,在spring中定義的bean初始化前呼叫這個方法;
    (2)postProcessAfterInitialization方法,在spring中定義的bean初始化後呼叫這個方法;
    這個雖然也能執行,但是是每次載入一個bean都會去執行,不太滿足我的要求,我只需要一次就ok了,但是這個介面針對某個專門的bean有用

  2. 第二種方式 編寫一個實現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容器,導致執行兩次,.
  1. 最後一種方式編寫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 還需要手動獲取,比較麻煩.