1、创建一个MessageEvent事件
package dnn.mytest;
import org.springframework.context.ApplicationEvent;
/**
* 创建一个信息事件,继承org.springframework.context.ApplicationEvent
* @author lenovo
*
*/
public class MessageEvent extends ApplicationEvent {
private String name;
private String message;
private static final long serialVersionUID = 1L;
public MessageEvent(Object source, String name, String message) {
super(source);
// TODO Auto-generated constructor stub
this.name = name;
this.message = message;
}
public String getText() {
return name + ":" + message;
}
}
2、创建一个事件的监听器
package dnn.mytest;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
@Component
/**
* 创建一个事件的监听器,实现org.springframework.context.ApplicationListener,同时要注册为组件
* @author lenovo
*
*/
public class MessageListener implements ApplicationListener<MessageEvent>{
/**
* 重写onApplicationEvent方法,并且对MessageEvent事件进行处理
*/
@Override
public void onApplicationEvent(MessageEvent event) {
// TODO Auto-generated method stub
System.out.println(event.getText());
}
}
3、创建一个事件的工具类,用来发布事件
package dnn.mytest;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ApplicationEvent;
import org.springframework.stereotype.Component;
@Component
/**
* 创建一个事件发布的工具类,同时注册为组件,实现org.springframework.context.ApplicationContextAware
* @author lenovo
*
*/
public class MessageEventUtils implements ApplicationContextAware {
private static ApplicationContext applicationContext;
/**
* 获取上下文中已经实例化的bean
*/
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
// TODO Auto-generated method stub
MessageEventUtils.applicationContext = applicationContext;
}
/**
* 发布事件的方法,当发布事件的时候会被监听器监听到,同时对事件进行处理
* @param applicationEvent
*/
public static void publishEvent(ApplicationEvent applicationEvent) {
applicationContext.publishEvent(applicationEvent);
}
}
4、测试
package dnn.mytest;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(value = "/api/test")
public class TestController {
@GetMapping("/test")
public void testEvent() {
// 发布事件
MessageEventUtils.publishEvent(new MessageEvent("ceshi" , "xujuntao", "hello world"));
}
}