Spring:事件监听

发布于 2021-08-27  525 次阅读


三要素:

1.事件

2.监听器

3.触发动作

使用步骤:

1.创建一个监听器,实现ApplicationListener接口,泛型中指定事件类型

//实现接口写法
public class PrintListener implements ApplicationListener<DemoEvent> {
    @Override
    public void onApplicationEvent(DemoEvent event) {
        System.out.println("调用DemoEvent的print方法输出其内容:");
        event.print();
    }
}
//注解写法
@Component
public class UserEventHandler {
    @EventListener
    public void handleLoginEvent(LoginEvent loginEvent){
        System.out.println("监听登入成功");
        //TODO 调用统计接口记录时间,地点
    }
}

2.创建一个事件,继承ApplicationEvent抽象类

public class DemoEvent extends ApplicationEvent {
    private String text;

    /**
     * Create a new ApplicationEvent.
     *
     * @param source the object on which the event initially occurred (never {@code null})
     */
    public DemoEvent(Object source) {
        super(source);
    }

    public DemoEvent(Object source, String text) {
        super(source);
        this.text = text;
    }

    public void print() {
        System.out.println("print event content:" + this.text);
    }
}

3.注册监听器到容器中,发布事件。

//使用示例
@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(DemoApplication.class, args);
        //注册监听器
        context.addApplicationListener(new PrintListener());
        //发布事件
        context.publishEvent(new DemoEvent(new Object(),"hello world."));
    }

}
//在Service中使用
@Service("userService")
public class UserServiceImpl implements UserService,ApplicationContextAware{

    private ApplicationContext applicationContext;

    @Override
    public void login(User user) {
        //TODO 登入校验操作。。。。
        publish(new LoginEvent(new Object(),"我要登入了"));
    }

    public void publish(LoginEvent loginEvent){
        applicationContext.publishEvent(loginEvent);
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }
}


欢迎欢迎~热烈欢迎~