如何在项目启动过程中实现自定义操作
上一篇我们使用本地阻塞队列时,实现了ServletContextListener
接口在项目启动后创建了一个单线程的线程池来处理我们的日志阻塞队列的内容,今天我们就针对此实现方式来简单聊一下,看看都有哪些方案可以实现项目启动后自定义操作这个功能:
使用Spring框架中
@EventListener
注解,监听Spring Boot的启动事件(如ContextRefreshedEvent
表示应用上下文初始化完成或被刷新所发布的事件),当Spring发布相应的事件时,标记有@EventListener的方法会被自动调用@Slf4j @Component public class ArticleListener6 { @EventListener public void handleContextRefreshedEvent(ContextRefreshedEvent event) { log.info("利用@EventListener注解实现自定义操作"); } }
实现
ApplicationListener
接口并指定监听的事件类型,这也是Spring框架中提供的,实现了该接口的类在应用启动发布相应事件时,如果监听了相应事件的方法会被触发执行@Slf4j @Component public class ArticleListener7 implements ApplicationListener<ApplicationStartedEvent> { @Override public void onApplicationEvent(ApplicationStartedEvent event) { log.info("实现ApplicationListener接口实现自定义操作"); } }
实现
SmartLifecycle
接口,这是Spring Boot中的一个接口,我们可以在这里执行一些自定义操作。但是这个接口的主要作用是给开发者提供自定义Bean生命周期的能力@Slf4j @Component public class ArticleListener5 implements SmartLifecycle { private boolean isRunning = false; @Override public void start() { if (!isRunning) { log.info("实现SmartLifecycle接口应用启动后的自定义逻辑操作"); isRunning = true; } } @Override public void stop() { if (isRunning) { log.info("实现SmartLifecycle接口实现应用停止前的自定义逻辑操作"); isRunning = false; } } @Override public boolean isRunning() { return isRunning; } }
通过实现
CommandLineRunner
接口并注入到Spring IoC容器中,这是Spring Boot特有的接口,可以实现应用启动后执行特定的逻辑。这个接口提供了一个run方法,我们可以在这里执行一些自定义操作@Slf4j @Component public class ArticleListener3 implements CommandLineRunner { @Override public void run(String... args) { log.info("实现CommandLineRunner接口实现自定义操作"); } }
与
CommandLineRunner
类似,ApplicationRunner
也是Spring Boot提供的一个接口,用于在应用启动后执行特定逻辑。它的使用方式与CommandLineRunner基本相同@Slf4j @Component public class ArticleListener4 implements ApplicationRunner { @Override public void run(ApplicationArguments args) { log.info("实现ApplicationRunner接口实现自定义操作"); } }
实现
ServletContextListener
接口,当Web应用程序启动时,会触发contextInitialized方法,我们可以在这里执行一些自定义操作@Slf4j @Component public class ArticleListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { log.info("实现ServletContextListener接口实现自定义操作"); } }
定义一个监听类并在类中写一个方法,在这个方法上使用@PostConstruct注解,标记的方法会在所有依赖注入完成后被自动调用,这里也可以执行一些自定义操作
@Slf4j @Component public class ArticleListener2 { @PostConstruct public void onApplicationEvent() { log.info("利用@PostConstruct注解实现自定义操作"); } }
总的来说,这些方法各有特点,我们可以根据实际需求和场景选择合适的方式来实现应用启动后的自定义逻辑
- 本文标签: java spring
- 本文链接: https://www.58cto.cn/article/46
- 版权声明: 本文由程序言原创发布, 非商业性可自由转载、引用,但需署名作者且注明文章出处:程序言 》 如何在项目启动过程中实现自定义操作 - https://www.58cto.cn/article/46