首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如果没有@PostConsrtuct/init/@EventListener,如何在Spring中启动时运行一次方法?

在Spring中,如果没有使用@PostConstruct、init方法或@EventListener注解,可以通过实现InitializingBean接口或使用@Bean注解的initMethod属性来在启动时运行一次方法。

  1. 实现InitializingBean接口:
    • 创建一个类并实现InitializingBean接口。
    • 在类中实现afterPropertiesSet()方法,该方法将在Bean的属性设置完成后被调用。
    • 在方法中编写需要在启动时运行的代码逻辑。
    • 示例代码如下:
    • 示例代码如下:
  • 使用@Bean注解的initMethod属性:
    • 在配置类中使用@Bean注解定义Bean,并通过initMethod属性指定在启动时运行的方法。
    • 在方法中编写需要在启动时运行的代码逻辑。
    • 示例代码如下:
    • 示例代码如下:

以上两种方式都可以在Spring启动时运行一次方法,可以根据具体需求选择适合的方式。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

OpenSource - Spring Startup Ananlyzer

,支持Spring Bean异步初始化,减少优化Spring应用启动时间。...---- 应用启动时长优化 提供一个Spring Bean异步初始化jar包,针对初始化耗时比较长的bean,异步执行init和@PostConstruct方法提高应用启动速度。...=30 请务必配置spring-startup-analyzer.app.health.check.endpoints选项,不然会一直采集直到应用启动检查超时时间(默认20分钟)才会停止,每隔1秒请求一次...如果是以java命令行的方式启动应用,则在命令行添加,如果是在IDEA启动,则需要在VM options选项添加。...应用启动时长优化 从应用启动数据采集中,可以获取初始化耗时长的Bean,因为Spring启动过程是单线程完成的,为了优化应用的启动时长,可以考虑将这些耗时长的Bean的初始化方法异步化,查看实现原理。

44740

SpringBoot 启动时初始化数据

:ApplicationRunner与CommandLineRunner 如果需要在SpringApplication启动时执行一些特殊的代码,可以实现ApplicationRunner 或 CommandLineRunner...在 spring 初始化 bean 的时候,如果bean实现了 InitializingBean 接口,在对象的所有属性被初始化后之后才会调用 afterPropertiesSet() 方法 @Component...bean 的配置文件指定 init-method 方法,或者在 @Bean 设置 init-method 属性 init-method和@PostConstruct 前面就说过官方文档上不建议使用...,所有监听者都继承它,也就是我们所说的观察者,当然我们也可以使用注解 @EventListener,效果是一样的 事件 在Spring框架,默认对ApplicationEvent事件提供了如下支持:...项目中会存在二次调用的问题,即调用两次该方法,原因是在传统的Spring MVC项目中,系统存在两个容器,一个root容器,一个project-servlet.xml对应的子容器,在初始化这两个容器的时候都会调用该方法一次

1.9K10

了解这些,你就可以在Spring启动时为所欲为了

Spring 已经是 Java Web 领域使用最多,应用最广泛的 Java 框架。 此文将专注讲解如何在 Spring 容器启动时实现我们自己想要实现的逻辑。...我们时常会遇到在 Spring 启动的时候必须完成一些初始化的操作,创建定时任务,创建连接池等。...事件 使用 Constructor 注入方式 实现 SpringBoot 的 CommandLineRunner 接口 SmartLifecycle 机制 原始构造函数 如果没有 Spring 容器,...因此,如果我们想在 Spring 启动的时候实现一些相应的逻辑,可以找到 Spring 启动过程符合我们需要的事件,通过监听相应的事件来完成我们的逻辑: @Component @Slf4j public..., 这也是 Spring 推荐的注入机制(在我们使用 IDEA 的时候,如果没有关闭相应的代码 Warning 机制,会发现在成员变量上的@Autoware是黄色的,也就是 idea 不建议的代码)。

1.1K30

Spring事件

Spring事件 ? 1概述 在本文中,我们将讨论如何在Spring中使用事件。...4.2开始,事件监听器不需要实现ApplicationListener接口 的bean,它可以通过@EventListener注解在托管bean的任何公共方法 上注册: @Component public...还有另一种发布事件的方式,如果我们从使用@EventListener注解的方法返回非null值作为结果,Spring框架将把该结果作为新事件发送给我们。...并且,如果没有正在运行的事务,则根本不发送事件,除非我们通过将fallbackExecution属性设置为true来覆盖它。...总结 在这篇文章,我们讨论了在Spring处理事件的基础知识,创建一个简单的自定义事件,然后发布,最后在监听器处理它。 我们还简要介绍了如何在配置启用事件的异步处理。

76150

Spring应用启动分析优化

wall clock火焰图(支持指定线程名称,不指定则采集全部线程) 图片 应用启动时长优化 提供一个Spring Bean异步初始化jar包,针对初始化耗时比较长的bean,异步执行init和@PostConstruct...如果是以java命令行的方式启动应用,则在命令行添加,如果是在IDEA启动,则需要在VM options选项添加。...EventListener extends Startable { /** * 应用启动时调用 */ void start(); /** * 应用启动完成后调用...onEvent()方法在监听的事件发生时会被调用 例如下面是一个统计应用启动过程java.net.URLClassLoader.findResource(String)方法调用次数的扩展 打包运行 在...应用启动时长优化 从应用启动数据采集中,可以获取初始化耗时长的Bean,因为Spring启动过程是单线程完成的,为了优化应用的启动时长,可以考虑将这些耗时长的Bean的初始化方法异步化,查看实现原理。

55220

Spring高手之路7——事件机制与监听器的全面探索

Spring 4.3开始,如果类只有一个构造方法,那么Spring将会自动把这个构造方法当作是我们希望进行自动装配的构造方法,无需显式地添加@Autowired或@inject注解。...如果类有多个构造方法,并且没有在任何构造方法上使用@Autowired或@inject注解,那么Spring将会使用无参数的构造方法如果存在的话)来创建这个类的实例。...我们来看看源码,在 Spring ,AnnotationConfigApplicationContext 并没有直接实现 Lifecycle 接口。   ...但此时,初始化回调(@PostConstruct,InitializingBean接口的afterPropertiesSet方法或定义的init-method)还未开始执行。...对于使用@EventListener注解的方法(即注解式监听器),如果不显式指定@Order,那么它的执行顺序就默认指定为@Order(0)。

1.1K40

添加 SpringBoot 自定义启动代码的六种方式(下)

引言 上一篇文章,我们介绍了六种 SpringBoot 启动时运行代码的方法,并且详细介绍了其中两个可以获取和处理 spring 启动参数的方法: 添加 SpringBoot 自定义启动代码的六种方式...ApplicationContextInitializedEvent -- Spring 项目启动时,已经完成 ApplicationContext 创建且调用所有的 ApplicationContextInitializers...@Postconstruct 注解是 javaEE 的功能,而并非 Spring 的功能,因此,自 java11 不再默认包含 javaEE 开始,如果你想要使用这一功能,你需要手动添加 java.ee.ee...通过 Bean 的 initMethod 5.1 简介 Spring 的 Bean 拥有一个属性 initMethod 可以让我们指定 bean 创建时的初始化方法,借助这个属性,我们就可以在其中添加我们想要的启动代码了...5.2 注意事项 需要注意的是,这个 initMethod 必须是没有参数和返回值。但这个方法可以使 static 的甚至是 private 的。

44320

Spring5源码 - 10 Spring事件监听机制_应用篇

Spring的内置事件由系统内部进行发布,只需注入监听器 ContextRefreshedEvent 当容器被实例化或refreshed时发布.调用refresh()方法, 此处的实例化是指所有的...如果容器支持热重载,则refresh可以被触发多次(XmlWebApplicatonContext支持热刷新,而 GenericApplicationContext则不支持) ContextStartedEvent...当容器启动时发布,即调用start()方法, 已启用意味着所有的Lifecycle bean都已显式接收到了start 信号 ContextStoppedEvent 当容器停止时发布,即调用stop...event.print(); } } 方法上需要标注 @EventListener(ArtisanEvent.class),方法名任意 其次需要是spring容器托管的bean,所以这里加了@...component @EventListener,修饰在方法上,是不是比基于实现类的方式要好,不用一个事件一个类了,确实如此。

28220

Spring源码学习笔记(11)——Event体系

简介 Event体系是Spring提供的一种重要的机制,支持以事件——监听器的模式同步或者异步处理业务逻辑,并在一定程度上降低业务之间的耦合。 本篇主要介绍Event的使用方式及其运行原理。 一....ApplicationEventMulticaster的初始化在容器启动时完成,即AbstractApplicationContext的refresh()方法。...IoC容器的applicationEventMulticaster成员变量,,首先在当前BeanFactory查找name为applicationEventMulticaster的Bean,如果存在则直接返回...注解的方法 EventListener eventListener = AnnotationUtils.findAnnotation(method, EventListener.class...如果事件类型没有继承ApplicationEvent,则将其包装成一个PayloadApplicationEvent事件。

79520

Spring Cloud Bus的事件的订阅与发布(二)

事件监听器 Spring Cloud Bus,事件监听器的定义可以是实现ApplicationListener接口,或者是使用@EventListener注解的形式。...spring.cloud.bus配置也能够进行正常运行。...在META-INF/spring.factories配置了EnableAutoConfiguration配置项为BusAutoConfiguration,在服务启动时会自动加载到Spring容器,其中对于指定主题的消息如何发送与监听处理如下...acceptRemote方法, 传递的参数RemoteApplicationEvent就是stream的消息。...总结 本文在上一篇介绍Spring Cloud Bus的事件基础上,结合源码继续介绍事件的监听器以及事件的订阅与发布是如何在消息总线实现的。 消息总线常用于传播状态的变更和管理指令的发布。

73540

Spring官网阅读(十二)ApplicationContext详解(

Spring运行环境的抽象,可以返回环境的属性,并能出现出现的占位符 借助于Resource系列接口,完成对底层资源的访问及加载 继承了ApplicationEventPublisher接口,能够进行事件发布监听...负责创建、配置及管理Bean 在上篇文章我们已经分析学习了1,2两点,这篇文章我们继续之前的学习 Spring的资源管理 首先需要说明的是,Spring没有让ApplicationContext...,代表优先级越高,在上面的例子,会执行listen2方法再执行listen1方法 ---- 那么Spring到底是如何实现的这一套事件发布机制呢?...SimpleApplicationEventMulticaster,这是Spring默认提供的一个事件分发器,如果我们没有进行特别的配置的话,就会采用这个类生成的对象作为容器的事件分发器。...“进入MyEventMulticaster”这句话打印了两次,这是一次是容器启动时会发布一个ContextStartedEvent事件,也会调用我们配置的事件分发器进行事件发布。

1.5K20

Spring Cloud Bus的事件的订阅与发布(二)

事件监听器 Spring Cloud Bus,事件监听器的定义可以是实现ApplicationListener接口,或者是使用@EventListener注解的形式。我们看一下事件监听器的类图。...spring.cloud.bus配置也能够进行正常运行。...在META-INF/spring.factories配置了EnableAutoConfiguration配置项为BusAutoConfiguration,在服务启动时会自动加载到Spring容器,其中对于指定主题的消息如何发送与监听处理如下...acceptRemote方法, 传递的参数RemoteApplicationEvent就是stream的消息。...总结 本文在上一篇介绍Spring Cloud Bus的事件基础上,结合源码继续介绍事件的监听器以及事件的订阅与发布是如何在消息总线实现的。 消息总线常用于传播状态的变更和管理指令的发布。

1.8K70

从注解@EventListener和@TransactionalEventListener掌握Spring的事件机制原理 - Java技术债务

Spring我们可以通过实现ApplicationListener接口或者@EventListener接口来实现事件驱动编程。...TransactionManager没有开启事务事件处理,但是当前事务监听方法配置了 // fallbackExecution属性为true,说明其需要对当前事务事件进行监听,无论其是否有事务...当你想根据一些运行时条件有条件地处理一个事件时,这很有用。 避免在监听器方法访问数据库:一般来说,在事件监听器方法避免数据库访问是一个好的做法。...如果传播值是propagation.REQUIRES_NEW,监听器将在一个新的事务性上下文中运行。...的方法上面使用@Order(顺序值)注解来标注顺序,: @EventListener @Order(1) public void test(TestEvent event) { } Spring

19710

面试官:Nacos 为什么这么强!讲讲实现原理?我懵了。。

看到EventListener我们就应该知道,Nacos是通过Spring的事件机制继承到SpringCloud中去的。...serverProxy.registerService()实现服务注册 心跳机制: 从上述代码看,所谓心跳机制就是客户端通过schedule定时向服务端发送一个数据包 ,然后启动-个线程不断检测服务端的回应,如果在设定时间内没有收到服务端的回应...调用addInstance添加服务实例 根据namespaceId、serviceName从缓存获取Service实例 如果Service实例为空,则创建并保存到缓存 通过putService()...方法将服务缓存到内存 service.init()建立心跳机制 consistencyService.listen实现数据一致性监听 service.init ( ) 方法的如下图所示,它主要通过定时任务不断检测当前服务下所有实例最后发送心跳包的时间...表示服务名、EventListener表示监听到的事件: 具体调用方式如下: 或者调用selectInstance方法如果将subscribe属性设置为true,会自动注册监听: Nacos客户端中有一个

53143

补习系列(21)-SpringBoot初始化之7招式

原因在于,当构造方法被调用时,Spring上下文中的Environment这个Bean很可能还没有被实例化,同时也仍未注入到当前对象,所以并不能这样进行调用。...下面,我们来看看在SpringBoot实现"安全初始化"的一些方法: 1、 @PostConstruct 注解 @PostConstruct 注解其实是来自于 javax的扩展包(大多数人的印象是来自于...如果不使用注解的话,你需要让Bean实例继承 InitializingBean接口,并实现afterPropertiesSet()这个方法。...(); } 然后,这里将initMethod指向init方法,相应的我们也需要在Bean实现这个方法: public class InitMethodExampleBean { private...="init"> 该方式在早期的 Spring版本中大量被使用 4、 构造器注入 如果依赖的字段在Bean的构造方法声明,那么Spring框架会先实例这些字段对应的Bean,再调用当前的构造方法

52730

轻量级内部组件解耦神器 Spring Event(Spring 事件)最佳实践

在此示例,我们将创建一个Spring Boot应用程序,演示如何使用Spring事件来处理用户登录事件。...message send User logged in: 小王User logged in: 小王单监听器和多监听器上文示例,我们使用多监听器实现了对登录事件的监听,如果我们实际业务只需要一个监听器...事件可以和事务一起使用,但是可能会出现下面这种异常情况,用户注册成功后发布登录事件,但在后续的事务处理处理异常导致事务回滚,会出现用户收到注册成功短信但实际没有注册成功。...实际业务不建议使用,本身 Spring Event 的意义在于对内部组件进行解耦,各个监听器之间应该尽可能的独立。...虽然我们可以写一些附加的代码逻辑、技术手段去保证可靠性,但个人认为并不划算,因此建议 Spring Event 应仅使用在应用程序内部组件解耦且没有可靠性要求的场景,比如消息通知等。

1.3K30

你所不知道的Nacos实现原理

看到EventListener我们就应该知道,Nacos是通过Spring的事件机制继承到SpringCloud中去的。...从上述代码看,所谓心跳机制就是客户端通过schedule定时向服务端发送一个数据包 ,然后启动-个线程不断检测服务端的回应,如果在设定时间内没有收到服务端的回应,则认为服务器出现了故障。...根据namespaceId、serviceName从缓存获取Service实例 如果Service实例为空,则创建并保存到缓存 ?...通过putService()方法将服务缓存到内存 service.init()建立心跳机制 consistencyService.listen实现数据一致性监听 service.init ( ) 方法的如下图所示...subscribe方法来实现监听,其中serviceName表示服务名、EventListener表示监听到的事件: ?

1.8K20

掌握 Spring 之事件处理

通常做法就是在回调方法里直接使用订单服务更新数据, 然而这样实现上两个模块出现了紧密耦合,如果订单更新的操作需要进行调整,那么在支付回调的代码块也需要被修改。...事件:" + event); } } 这里需要注意的是,注解 @EventListener标记的方法参数类型不再限制必须是 ApplicationEvent的子类,没有实现 ApplicationListener...而这样采用单线程同步方式处理的好处主要是可以保证让事件处理与发布者处于同一个事务环境里,如果多个侦听方法涉及到数据库操作时保证了事务的存在。...注意:注册 ApplicationEventMulticaster Bean 后所有的事件侦听处理都会变成的异步形式,如果需要针对特定的事件侦听采用异步方式的话:可以使用 @EventListener...:程序启动时发生。

1.2K40

Spring5源码 - 13 Spring事件监听机制_@EventListener源码解析

异步事件监听应用及源码解析 通过上面三篇文章的学习,是不是发现没有看到Spring是如何解析@EventListener注解的呢?...} catch (Throwable ex) { ....... } //如果没有找到带...---- 小结 processBean的主要业务逻辑: 查找带@EventListener注解的方法 、 不为空的话,遍历找到的方法 在遍历方法的循环中,遍历EventListenerFactory,如果支持...实现类 onApplicationEvent方法,基于注解的是反射调用,而基于接口的形式是直接调用实现类的onApplicationEvent ?...基于接口,可以参考我的前面的博客: Spring5源码 - 10 Spring事件监听机制_应用篇 ---- 附 如果事件派发器设置了 Executor,则异步多线程的事件派发

76110
领券