content: package com.vua.common.listener;
  
  
  import com.vua.common.annotation.BaseService;
  import com.vua.common.base.BaseInterface;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  import org.springframework.context.ApplicationListener;
  import org.springframework.context.event.ContextRefreshedEvent;
  
  import java.lang.reflect.Method;
  import java.util.Map;
  
  /**
   * Created by admin on 2017/6/27.
   *  spring容器初始化完成事件
   */
  public class ApplicationContextListener implements ApplicationListener<ContextRefreshedEvent> {
  
      private static Logger _log = LoggerFactory.getLogger(ApplicationContextListener.class);
  
  
      @Override
      public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
          // root application context
          if(null == contextRefreshedEvent.getApplicationContext().getParent()) {
              _log.debug(">>>>> spring初始化完毕 <<<<<");
              // spring初始化完毕后，通过反射调用所有使用BaseService注解的initMapper方法
              Map<String, Object> baseServices = contextRefreshedEvent.getApplicationContext().getBeansWithAnnotation(BaseService.class);
              for(Object service : baseServices.values()) {
                  _log.debug(">>>>> {}.initMapper()", service.getClass().getName());
                  try {
                      Method initMapper = service.getClass().getMethod("initMapper");
                      initMapper.invoke(service);
                  } catch (Exception e) {
                      _log.error("初始化BaseService的initMapper方法异常", e);
                      e.printStackTrace();
                  }
              }
  
              // 系统入口初始化
              Map<String, BaseInterface> baseInterfaceBeans = contextRefreshedEvent.getApplicationContext().getBeansOfType(BaseInterface.class);
              for(Object service : baseInterfaceBeans.values()) {
                  _log.debug(">>>>> {}.init()", service.getClass().getName());
                  try {
                      Method init = service.getClass().getMethod("init");
                      init.invoke(service);
                  } catch (Exception e) {
                      _log.error("初始化BaseInterface的init方法异常", e);
                      e.printStackTrace();
                  }
              }
  
          }
      }
  }
  