方法一:
实现ServletContextListener ,并添加@WebListener注解
因为ServletContextListener 是由servlet容器管理,游离于spring容器之外,所有不能直接使用spring注入的Bean
要想直接使用注入的Bean,需要使用WebApplicationContextUtils类来实现
@WebListener public class MyServletListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { System.err.println("监听器启动。。。。");
WebApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(sce.getServletContext());
ChatService chatService = (ChatService) context.getBean("chatService");
} @Override public void contextDestroyed(ServletContextEvent sce) { } }
同时在主启动类上添加@ServletComponentScan注解扫描
@SpringBootApplication @ServletComponentScan("com.app.history_sync.listener") public class DemoApplication { public static void main(String[] args) { SpringApplication.run(HistorySyncApplication.class, args); } }
方法二:
实现ApplicationListener,这种方式要依赖spring
public class ApplicationReadyListener implements ApplicationListener<ApplicationReadyEvent> { @Autowired private ChatService chatService; @Override public void onApplicationEvent(ApplicationReadyEvent event) { System.err.println("ApplicationReadyListener......"); } }
同时在主启动类引入自定义的ApplicationReadyListener
@SpringBootApplicationpublic class HistorySyncApplication { public static void main(String[] args) { ApplicationReadyListener readyListener = new ApplicationReadyListener(); SpringApplication application = new SpringApplication(HistorySyncApplication.class); application.addListeners(readyListener); application.run(args); // SpringApplication.run(HistorySyncApplication.class, args); } }