监听:有四种方式
/** * 定义一个事件 */ public class MyApplicationEvent extends ApplicationEvent { public MyApplicationEvent(Object source) { super(source); } }
/** * 定义一个事件监听器 */ //@Component public class MyApplicationListener implements ApplicationListener<MyApplicationEvent> { @Override public void onApplicationEvent(MyApplicationEvent event) { System.out.println("监听到事件,可以处理"); } }
/** * 定义一个MyApplicationEvent事件,继承ApplicationEvent * 定义一个MyApplicationListener事件监听,实现ApplicationListener, * 添加监听器 * 发布事件 */ @SpringBootApplication public class Springboot8Application { public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(Springboot8Application.class, args); //添加监听 //context.addApplicationListener(new MyApplicationListener()); //发布事件 context.publishEvent(new MyApplicationEvent(new Object())); } }
1.添加监听
//添加监听 //context.addApplicationListener(new MyApplicationListener());
2.添加配置
#context.listener.classes=com.fz.song.one.MyApplicationListener
3.
纳入spring管理
//@Component
4.使用注解
/**
* 参数任意:(Event及其子类)
* 所有时间参数或者其子类都能接受到
* 参数一定是ApplicationEvent的子类
* @param event
*/
@EventListener
public void onApplicationEvent(MyApplicationEvent event) { System.out.println("监听到事件,可以处理"); }
第二种是怎么是怎么是实现的呢
org.springframework.boot.context.config.DelegatingApplicationListener类可以看到
private static final String PROPERTY_NAME = "context.listener.classes";一个常量
spring和springboot 也自己提供了很多监听事件,详细见:
org.springframework.context.event
和
org.springframework.boot.context.event