Spring扩展接口-内置事件ContextEvent

简介

依赖关系

序号Spring 内置事件描述
1ContextRefreshedEventApplicationContext 被初始化或刷新时,该事件被发布。这也可以在ConfigurableApplicationContext接口中使用 refresh() 方法来发生。此处的初始化是指:所有的Bean被成功装载,后处理Bean被检测并激活,所有Singleton Bean 被预实例化,ApplicationContext容器已就绪可用
2ContextStartedEvent当使用 ConfigurableApplicationContext (ApplicationContext子接口)接口中的 start() 方法启动 ApplicationContext 时,该事件被发布。你可以调查你的数据库,或者你可以在接受到这个事件后重启任何停止的应用程序。
3ContextStoppedEvent当使用 ConfigurableApplicationContext (ApplicationContext子接口)接口中的 start() 方法启动 ApplicationContext 时,该事件被发布。你可以调查你的数据库,或者你可以在接受到这个事件后重启任何停止的应用程序。
4ContextClosedEvent当使用 ConfigurableApplicationContext 接口中的 close() 方法关闭 ApplicationContext 时,该事件被发布。一个已关闭的上下文到达生命周期末端;它不能被刷新或重启。
5RequestHandledEvent这是一个 web-specific 事件,告诉所有 bean HTTP 请求已经被服务。只能应用于使用DispatcherServlet的Web应用。在使用Spring作为前端的MVC控制器时,当Spring处理用户请求结束后,系统会自动触发该事件。

应用实例

java中借助Spring获取所有带有指定注解的接口、类、对象。

示例:

@Component
public class ContextRefreshedListener implements ApplicationListener<ContextRefreshedEvent> {
    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        // 根容器为Spring容器
        if (event.getApplicationContext().getParent() == null) {
            // 获取含有主机ClassAnnition的类
            Map<String, Object> beans = event.getApplicationContext().getBeansWithAnnotation(ClassAnnotion.class);
            for (Object bean : beans.values()) {
                System.out.println(bean == null ? "null" : bean.getClass().getName());
            }
            System.out.println("=====ContextRefreshedEvent=====" + event.getSource().getClass().getName());
        }
    }
}
@Component
@ClassAnnotion
public class AnnotionService {
    public TestService() {}
    @FieldAnnotion
    private String name;
    public void sayHello() {
        System.out.println("Hello");
    }
}

参考:

[1]. www.cnblogs.com/duanxz/p/34… [2]. www.cnblogs.com/duanxz/p/37… [3]. blog.csdn.net/liyantianmi… [4]. www.cnblogs.com/zhangxiaogu… [5]. zhuanlan.zhihu.com/p/101141124

posted @ 2023-10-12 10:07  扎Zn了老Fe  阅读(66)  评论(0编辑  收藏  举报  来源