Hello,你们好,前面几篇Spring的文章把Spring容器这一块大体分享完了,容器的建立,容器里的Bean,后面一篇文章会好好的讲一讲AOP,这一篇来点小菜吃吃,讲个Spring的容器事件,这个知识不是很经常使用。为何呢?由于通常稍微大型一点的系统都是分布式的,不会采用局部项目中的通信,要通信也是采用MQ,但既然写了Spring系列的博客,仍是和你们分享分享。OK,老讨论,文章结构:java
谈到事件,其实不少框架组件都自带事件机制,宏观上讲,JDK里的notify其实也算是事件,可以通知wait的线程。这里给你们来一张图,而后直接切入主题的讲Spring里的内置事件: bash
好了,其实很是简单,而后给一下Spring内部的Spring事件继承图: 架构
而后给一个例子演示内置事件:app
public class ContextStopListener implements ApplicationListener<ContextStoppedEvent>{
public void onApplicationEvent(ContextStoppedEvent event) {
System.out.println("ContextStoppedEvent Received");
}
}
复制代码
直接把这个类注入到Spring中成为Bean便可。容器关闭时,就会调用onApplicationEvent...框架
上面能够看到,内置的事件,咱们只须要自定义一个Listener放入Spring容器便可。那么要是自定义的事件呢,来看一个例子:分布式
public class ZdyEvent extends ApplicationEvent {
private String whatsHasspend;
public ZdyEvent(Object source,String whatsHasspend) {
super(source);
this.whatsHasspend=whatsHasspend;
}
public String getWhatsHasspend() {
return whatsHasspend;
}
public void setWhatsHasspend(String whatsHasspend) {
this.whatsHasspend = whatsHasspend;
}
}
public class ZdyListener implements ApplicationListener<ZdyEvent> {
@Override
public void onApplicationEvent(ZdyEvent zdyEvent) {
System.out.println("事件接收器接收到了Event:"+zdyEvent.getWhatsHasspend());
}
}
复制代码
而后咱们的Main:ide
public static void main( String[] args ) {
ApplicationContext ac =new ClassPathXmlApplicationContext("applicationContext.xml");
ZdyEvent event =new ZdyEvent(ac,"我发送了一个事件:我吃了一个苹果..");
ac.publishEvent(event);
}
复制代码
打印:this
事件接收器接收到了Event:我发送了一个事件:我吃了一个苹果..
复制代码
注意,定义完事件和时间监听器后,须要把事件监听器(ZdyListener)放入到容器当中。而咱们的事件类(ZdyEvent)是不用放入到容器中的.spa
好了,其实前面已经提到过,Spring的事件机制厉害是厉害,但只停留的当前工程的Spring模块中,首先不适合集群,其次不适合分布式。因此,说白了,是个花架子。你们仅供了解。不管是集群仍是分布式的通信,确定是不会用这个东东,通常都是Mq,zk,kafka这类分布式组件,作过系统架构的应该比较清楚。本文也是顺带的提了提,大体说了说。Over,Have a good day .线程