Spring的监听器:可以监听事件 ,监听的对象必须是 ApplicationEvent自身或其子类/子接口! 比如context的关闭和刷新!
不多bb,直接讲述实现步骤:
方式一:必须实现ApplicationListener接口
package luzelong.listener;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
//监听器
@Component
public class MyListener implements ApplicationListener {
@Override//监听对象
public void onApplicationEvent(ApplicationEvent event) {//alt加Ctrl加 B 看监听哪些对象
System.out.println("================"+event+"===============");
}
}
方式二:注解 @EventListener
(语法上 可以监听任意事件,但建议 ApplicationEvent自身或其子类/子接口)
package luzelong.listener;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
@Component
public class MyListener2 {
@EventListener(classes = {ApplicationEvent.class})//通过注解告诉程序 这是个监听方法
public void myListenerMethod(ApplicationEvent event){//理论上可以监听任意事件,但建议也只监听ApplicationcationEvent自身或其子类
System.out.println("$$$$$$$$$$$$$$$$"+event);
}
}
自定义事件:
实现步骤可以简单的如下:
public static void tt(){
ApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class);
//String[] ids = context.getBeanDefinitionNames();
//for(String id:ids){
// System.out.println(id);
//}
//创建一个事件,并发布
context.publishEvent(new ApplicationEvent("MyEvent") {
});
((AnnotationConfigApplicationContext)context).close();
}
如果 context.publishEvent(new ApplicationEvent(“MyEvent”) { });看不懂则用下面的步骤:
创建一个类继承ApplicationEvent
import org.springframework.context.ApplicationEvent;
public class MyEvent3 extends ApplicationEvent {
/**
* Create a new ApplicationEvent.
*
* @param source the object on which the event initially occurred (never {@code null})
*/
public MyEvent3(Object source) {
super(source);
}
}
注册事件:
public static void tt(){
ApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class);
//String[] ids = context.getBeanDefinitionNames();
//for(String id:ids){
// System.out.println(id);
//}
//创建一个事件,并发布
MyEvent3 evn = new MyEvent3("my Event3");
context.publishEvent(evn);
((AnnotationConfigApplicationContext)context).close();
}
执行tt方法,my Event3就会被监听器监听到!!!!!!!!