Spring扩展接口-内置事件ContextEvent
简介
依赖关系
序号 | Spring 内置事件 | 描述 |
---|---|---|
1 | ContextRefreshedEvent | ApplicationContext 被初始化或刷新时,该事件被发布。这也可以在ConfigurableApplicationContext接口中使用 refresh() 方法来发生。此处的初始化是指:所有的Bean被成功装载,后处理Bean被检测并激活,所有Singleton Bean 被预实例化,ApplicationContext容器已就绪可用 |
2 | ContextStartedEvent | 当使用 ConfigurableApplicationContext (ApplicationContext子接口)接口中的 start() 方法启动 ApplicationContext 时,该事件被发布。你可以调查你的数据库,或者你可以在接受到这个事件后重启任何停止的应用程序。 |
3 | ContextStoppedEvent | 当使用 ConfigurableApplicationContext (ApplicationContext子接口)接口中的 start() 方法启动 ApplicationContext 时,该事件被发布。你可以调查你的数据库,或者你可以在接受到这个事件后重启任何停止的应用程序。 |
4 | ContextClosedEvent | 当使用 ConfigurableApplicationContext 接口中的 close() 方法关闭 ApplicationContext 时,该事件被发布。一个已关闭的上下文到达生命周期末端;它不能被刷新或重启。 |
5 | RequestHandledEvent | 这是一个 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
本文来自博客园,作者:扎Zn了老Fe,转载请注明原文链接:https://www.cnblogs.com/itThinking/p/17771111.html