Spring事件目录
Spring 事件概述
Spring事件[^2](Application Event) 为Spring Bean与Bean之间的消息传递提供了支持;
当一个Bean完成某项工作后,希望其它Bean知道,并执行相应的操作;这时,只需要将其它想知道该Bean完成操作信息的Bean,监听该Bean所发生的事件即可.
作为C#开发者,从个人的习惯上讲,把事件,表述为消息,似乎更容易理解
而事实上,发布事件,确实也是广播了一则消息;而侦听事件,也是接收指定类型的消息
Spring事件关键类
- 事件源基类:ApplicationEvent
- 事件侦听接口:ApplicationListener
- 事件发布:使用Spring容器发布事件 ApplicationContext.publishEvent
Spring事件关键步骤
- 自定义事件
- 实现侦听接口
- 发布事件
关键Jar包
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.9.RELEASE</version>
<scope>compile</scope>
</dependency>
</dependencies>
Demo介绍
新建Spring Initializr工程
Maven导入关键jar包
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.9.RELEASE</version>
<scope>compile</scope>
</dependency>
</dependencies>
自定义事件(消息)
package com.example.springevent;
import org.springframework.context.ApplicationEvent;
public class PrintEvent extends ApplicationEvent {
public String Name = "";
public int Age = 18;
public PrintEvent(Object source) {
super(source);
}
}
事件(消息)侦听者实现事件(消息)侦听
package com.example.springevent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
@Component
public class MyPrint implements ApplicationListener<PrintEvent> {
@Override
public void onApplicationEvent(PrintEvent printEvent) {
System.out.print(printEvent.toString());
}
}
事件(消息)发布者
package com.example.springevent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
@Component
public class MainPrint {//implements ApplicationContextAware {
@Autowired
private ApplicationContext AppContext;
public void SendPrintMessage()
{
PrintEvent _message = new PrintEvent(this);
_message.Name ="wjj";
_message.Age = 19;
AppContext.publishEvent(_message);
}
}
发布事件
package com.example.springevent;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
@SpringBootApplication
public class SpringEventApplication {
public static void main(String[] args) {
//使用AnnotationConfigApplicationContext读取配置EventConfig类,EventConfig类读取了使用注解的地方
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(EventConfig.class);
MainPrint publish = context.getBean(MainPrint.class);
publish.SendPrintMessage();
context.close();
System.out.print("--------------------------------------");
}
}