第一二种方式都是启动时候,把监听器加入到spring容器中,ConfigurableApplicationContext拿到这个对象再发布就可使用监听器了。
第三四中最终也是把监听器放入ConfigurableApplicationContext对象,只不过实现有了2个特别的类,注解和配置文件的形式
1.用addListener 方式注入
Event
public class MyApplicationEvent extends ApplicationEvent {
public MyApplicationEvent(Object source) {
super(source);
}
}
Listener
public class MyListener implements ApplicationListener<MyApplicationEvent> {
@Override
public void onApplicationEvent(MyApplicationEvent myApplicationEvent) {
System.out.println("接受事件,触发需要去做什么");
}
}
Application
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(DemoApplication.class);
//addListeners增加
app.addListeners(new MyListener());
ConfigurableApplicationContext context = app.run(args);
//发布事件
context.publishEvent(new MyApplicationEvent(new Object()));
context.close();
}
}
2.component 注入
Listener增加@Component注解
application启动类去掉 addListener 代码
3.application.properties配置context.listener.classes属性
listener上去掉component注解
application.properties 增加配置context.listener.classes=com.example.demo.work.event.MyListener
入口函数不变
4.@EventListener 注解
新建 MyEventHandle
@Component
public class MyEventHandle {
@EventListener
public void onEvent(MyApplicationEvent event){
System.out.println("触发事件,嘟嘟嘟");
}
}
入口函数不变