码迷,mamicode.com
首页 > 编程语言 > 详细

spring#事件发布订阅

时间:2019-11-13 22:00:00      阅读:80      评论:0      收藏:0      [点我收藏+]

标签:stc   turn   覆写   cat   class   一些事   ota   color   imp   

1. 如果在应用中发生了某些事件,事件会被拦截和处理就好了,这样就有了很大的灵活性,至少代码不会紧密的耦合在一起。

我们主动的发布一些事情,然后让一下代码监听事情的发生,然后处理事情,如果有必要可以为事件添加一些属性。

 

 

2. 几个类:

  • 事件类:ApplicationEvent 继承 java.util.EventObject, 我们需要继承ApplicationEvent,必要时候为事件添加一些属性;
  • 事件发布类:ApplicationContext 继承了org.springframework.context.ApplicationEventPublisher,我们需要通过ApplicationContext.publisEvent(event)发布事件;
  • 事件处理类:ApplicationListener 继承了java.util.EventListener,我们需要实现ApplicationListener接口,并覆写处理事件的方法,完成事件处理逻辑。

 

3. 一个demo:

自定义事件:

技术图片
import org.springframework.context.ApplicationEvent;

public class PermissionNeedReloadEvent extends ApplicationEvent {

    public PermissionNeedReloadEvent(Object source) {
        super(source);
    }

}
View Code

自定义事件处理器:

技术图片
import com.haonan.event.events.PermissionNeedReloadEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

@Component // 通过注解把当前的事件处理器注入到spring容器中去
public class PermissionNeedReloadEventHandler implements ApplicationListener<PermissionNeedReloadEvent> {
    @Override
    public void onApplicationEvent(PermissionNeedReloadEvent permissionNeedReloadEvent) {
        System.out.println(Thread.currentThread().getName() + "------------------出事啦 @" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        // 这里我读取数据库中的权限信息,加载到内存中去,或者干一些其他相关的事情
    }
}
View Code

事件发布代码:

技术图片
import com.haonan.event.events.PermissionNeedReloadEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    @Autowired
    private ApplicationContext app;

    @GetMapping("/hello")
    public String addRole() {
        // 这里系统中添加一些角色信息
        // 逻辑代码

        // 当系统添加了角色信息,需要产生一个权限需要被重新加载的事件
        app.publishEvent(new PermissionNeedReloadEvent(this));
        return "success";
    }
}
View Code

 

spring#事件发布订阅

标签:stc   turn   覆写   cat   class   一些事   ota   color   imp   

原文地址:https://www.cnblogs.com/luohaonan/p/11853450.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!