003 事件专题
Posted trekxu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了003 事件专题相关的知识,希望对你有一定的参考价值。
一 . 概述
spring为我们提供了事件驱动的编程方式.首先我们就需要了解一下事件的基本概念在
spring之中对应的类.
事件源 : 事件产生的地点,也就是事件发布的地方.
所有的IOC容器都实现了ApplicationEventPublisher接口,也就是具有容器事件的发布能力.
因此我们想要发布一个事件,我们只需要使用IOC容器就能发布一个事件.
事件监听器: 在spring之中,使用ApplicationListener完成事件监听器的创建.
事件源 : 使用ApplicationEvent完成事件的创建.
二 .三个核心对象的介绍
[1] 事件源 :
我们知道了spring的IOC就能发布事件,因此我们可以使用IOC容器作为事件源.另外使用ApplicationContextAware接口就能
获取到IOC容器.
[2]事件监听器:
public interface ApplicationListener<E extends ApplicationEvent> extends EventListener { void onApplicationEvent(E event); }
上面拿到接口之中定义了事件监听器接口,我们如果想要创建一个事件监听器就需要实现这个接口.
同时我们看到了泛型操作,这个泛型描述的就是事件对象.
我们看到了一个容器刷新的事件,这个事件是我们使用最多的一个事件了.
如果我们想要在容器创建完成之后,使用其中的Bean自动完成某些任务,我们就可以使用这个方式来完成.
三 .测试代码
//创建一个自己的监听器 public class MyListener implements ApplicationListener<ApplicationEvent>{ @Override public void onApplicationEvent(ApplicationEvent event) { //在这里我们监听了所有的容器事件 if(event instanceof ContextRefreshedEvent) { //此时发出了容器的刷新事件 if(((ApplicationContextEvent) event).getApplicationContext().getParent() == null) { // 为什么要进行这样的判断呢 ? 因为在我们的springmvc和spring整合的时候,会发出两次该事件. //我们需要保证必须使spring容器完成之后才能进行事件的响应 System.out.println("容器刷新了...."); } } } }
创建一个事件监听器.
@Configuration @Import(MyListener.class) public class Config { }
public class MainTest { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Config.class); } }
我们发现我们运行main方法的时候,会自动的实现事件监听.
四 .使用注解完成事件监听
以上是关于003 事件专题的主要内容,如果未能解决你的问题,请参考以下文章
力扣专题——剑指 Offer II 003. 前 n 个数字二进制中 1 的个数