Spring的事件(Application Event)为bean与bean之间的消息传递提供了支持。当一个bean处理完一个任务后,希望另一个bean知道并做后续的处理,这时我们需要让另一个bean监听当前bean所发送的事件。
spring的事件需要遵循如下步骤:
1:自定义事件,继承ApplicationEvent。
2:定义事件监听器,实现ApplicationListener。
3:利用容器发布事件。
给个示例代码:
1、自定义和事件
package com.example.demo.event;
import java.io.Serializable;
import org.springframework.context.ApplicationEvent;
public class EventSource extends ApplicationEvent implements Serializable{
//事件源
private static final long serialVersionUID = -5947023832545595712L;
private String mess;
public EventSource(Object source,String mess) {
super(source);
this.mess=mess;
}
public String getMess() {
return mess;
}
public void setMess(String mess) {
this.mess = mess;
}
}
2、事件监听器
package com.example.demo.event;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
@Component
public class Listener implements ApplicationListener<EventSource> { //事件监听器
@Override
public void onApplicationEvent(EventSource event) {
String mess=event.getMess();
System.out.println("。。。。接收到了消息。。。。。。"+mess);
}
}
3、事件发布类
package com.example.demo.event;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
@Component
public class Publisher {//发布者
@Autowired
private ApplicationContext applicationContext;
public void publish(String mess) {
this.applicationContext.publishEvent(new EventSource(this, mess));
}
}
4、配置类
package com.example.demo.event;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan("com.example.demo.event")
public class EventConfig {
}
5、启动类
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import com.example.demo.event.EventConfig;
import com.example.demo.event.Publisher;
@SpringBootApplication
public class EventDemoApplication {
public static void main(String[] args) {
SpringApplication.run(EventDemoApplication.class, args);
AnnotationConfigApplicationContext ctx=
new AnnotationConfigApplicationContext(EventConfig.class);
Publisher publisher=ctx.getBean(Publisher.class);
publisher.publish("测试消息传递");
ctx.close();
}
}