通过之前的学习,我们了解到ApplicationListener接口在spring事件广播中能够将消息广播到需要的监听器中。那么就让我们手撸一个监听器来试试。看看效果。
@Data
public class MyApplicationEvent extends ApplicationEvent {
private String age;
private String name;
/**
* Create a new ApplicationEvent.
*
* @param source the object on which the event initially occurred (never {@code null})
*/
public MyApplicationEvent(Object source,String age,String name) {
super(source);
this.age=age;
this.name=name;
}
}
@Component
public class MyApplicationListener implements ApplicationListener {
/***
* 监听事件
* @param event
*/
@Override
public void onApplicationEvent(ApplicationEvent event) {
System.out.println("myApplication....");
if (event instanceof MyApplicationEvent){
System.out.println("myapplicationEvent...");
System.out.println(event.toString());
}
}
}
@RestController
@RequestMapping("/file")
public class FileController implements ApplicationContextAware {
private static ApplicationContext context;
@GetMapping(value = "/test")
public void test(){
MyApplicationEvent myApplicationEvent=new MyApplicationEvent("test","123","tjl");
context.publishEvent(myApplicationEvent);
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.context=applicationContext;
}
}
注释:上述打印的结果中,最后两个输出是容器事件。
总结:在做广播的时候要首先明确广播事件,定义好广播事件之后再定义广播监听器。然后在广播监听器中对广播事件进行处理。在发送广播的时候用IOC容器的pushEvent方法。在注入content的时候,可以通过ApplicationContentAware接口来实现。