java听 ContextRefreshedEvent

我在我的 spring 应用程序中有一个 classX,我希望能够找出是否所有的 spring bean 都已初始化。为此,我正在尝试收听 ContextRefreshedEvent。

我在我的 spring 应用程序中有一个 classX,我希望能够找出是否所有的 spring bean 都已初始化。为此,我正在尝试收听 ContextRefreshedEvent。

到目前为止,我有以下代码,但我不知道这是否足够。

import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
public classX implements ApplicationListener<ContextRefreshedEvent> {
    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
       //do something if all apps have initialised
    }
}

这种方法是否正确,以找出是否所有的 bean 已初始化?

我还需要做什么才能收听 ContextRefreshedEvent?我需要在 xml 文件中注册 classX 吗?

28
AContextRefreshEventoccurs

ApplicationContext被初始化或刷新时。

所以你在正确的轨道上。

您需要做的是为classX声明一个 bean 定义。

使用@Component和组件扫描它所在的包

@Component
public class X implements ApplicationListener<ContextRefreshedEvent> {
    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
       //do something if all apps have initialised
    }
}

或使用<bean>声明

<bean class="some.pack.X"></bean>

Spring 将检测到 bean 的类型为ApplicationListener,并在不进行任何进一步配置的情况册它。

更高版本的 Spring 支持基于注释的事件。documentation状态

从 Spring 4.2 开始,您可以使用@EventListener注释在托管 bean 的任何公共方法上注册事件。

在上面的X类中,您可以声明一个带注释的方法,如

@EventListener
public void onEventWithArg(ContextRefreshedEvent event) {
}

或者甚至

@EventListener(ContextRefreshedEvent.class)
public void onEventWithout() {
}

上下文将检测此方法并将其注册为指定事件类型的。

文档更详细地介绍了完整的功能集:使用 SpEL 表达式进行条件处理,异步等。

仅供参考,Java 有类型,变量等命名约定对于类,约定是让他们的名字以大写字母字符开头。

14

弹簧 & gt;= 4.2

您可以使用注释驱动的事件,如下所示:

@Component
public class classX  {
    @EventListener
    public void handleContextRefresh(ContextRefreshedEvent event) {
    }
}

要注册的 ApplicationListener 在方法的签名中定义。

2

ContextRefreshedEvent 事件)被调用两次,一次在 init 中,第二次在 init 之后。

您可以使用(ApplicationReadyEvent 事件),并且在 init 之后只进行一次调用。

public class InvokeCatalogOne implements IInvokeCatalogOne {
    @EventListener
    public void fetchChargeCode(ApplicationReadyEvent event) {
    }
}
1

我会更喜欢 ApplicationReadyEvent。我发现 ContextRefreshedEvent 在我的 http 服务器启动之前被调用。ApplicationReadyEvent 将确保您的应用程序已准备好接受请求。

    @EventListener(ApplicationReadyEvent.class)
    public void startApp() {
        LOGGER.info("Application is now ready!");
    }

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(167)
用另一种颜色替换图像中的特定颜色(exchange iphone for different color)
上一篇
为功率计生成红色和绿色之间的颜色 (colors that start with f)
下一篇

相关推荐

  • java char 比较 A Comprehensive Guide

    示例示例Java中的char类型是一个16位的Unicode字符,它可以用来表示任何字符,包括数字、字母、标点符号等。Java中提供了两种方法来比较char类型:…

    2023-01-18 02:38:52
    0 30 97
  • java判断对象类型:使用Java的instanceof关键字判断对象类型

    示例示例Java中可以使用运算符来判断对象的类型,该运算符的格式为:object…

    2023-01-09 14:05:27
    0 82 69
  • java int char 转换一个实用的指南

    Java中int和char的转换可以通过使用Character类的toChars()方法和int的toString()方法来实现。…

    2023-01-06 06:01:57
    0 22 95
  • Coastea中式茶饮:集中式 Java日志记录(logging server)

    关于Coastea中式茶饮的问题,在logging server中经常遇到,我正在寻找一种方法来集中分布式软件(用 Java 编写)的日志记录问题,这将很容易,因为有问题的系统只有一个服务器。但请记住,将来很可能会运行更多的特定服务器实例(并且将会有更多的应用程序需要这样做),必须有一个 Logging-Server,它可以处理传入的日志并使它们可以访问支持团队。…

    2022-12-17 15:33:22
    0 82 79
  • Sketchup免费模型库:javascrript中的图形模型库

    关于Sketchup免费模型库的问题,在prim's algorithm visualization中经常遇到,我正在寻找 javascript 中的图形库,它为有向和无向图(如计算最小生成树,最短路径等)提供图形算法。我不需要任何布局算法,因为我想用 d3.js 实现这一点。谢谢…

    2022-12-14 08:56:37
    0 94 24
  • Cck8实验原理与步骤:Java-8中Stream的循环融合(内部工作原理)

    关于Cck8实验原理与步骤的问题,在fusion loop中经常遇到,我正在阅读《Java in Action》这本书。…

    2022-12-28 05:59:20
    0 68 87
  • 编程类课程:无法运行Coursera算法课程的java类

    关于编程类课程的问题,在algorithms course coursera中经常遇到,一年多以前,我参加了 Coursera 上的 Algorithm I 课程。现在我不能再运行我的课程了。我在这里看到了几个帖子,但它们没有帮助。我曾尝试从 Eclipse 以及从终端,但我得到错误,如:…

    2022-12-05 14:44:47
    0 38 62
  • 如何在Java中以YYYY-MM-DDHH:MI:Sec.Millisecond格式获取当前时间

    下面的代码给我当前时间。但它没有告诉任何关于毫秒。…

    2022-11-11 15:17:21
    0 76 93

发表评论

登录 后才能评论

评论列表(38条)