首页 > 编程语言 > 详细

Spring中的事件驱动模型(机制)

时间:2019-07-02 13:55:27      阅读:87      评论:0      收藏:0      [点我收藏+]

事件驱动模型是观察者模式的另一种形态,观察者相当于监听器,被观察者相当于事件源

事件源产生事件,监听器监听事件

 

以用户注册时候,要发送邮件和发送短信举例说明

定义一个事件

/**
 * spring会自动将该事件注册到applicationContext中
 * 这里有通过构造方法将事件源传递进去,有些场景可以用到,本例子中的事件源是UserService
 */
public class UserRegisterEvent extends ApplicationEvent
{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    //注册用户对象
    private UserBean user;

    /**
     * 重写构造函数
     * @param source 发生事件的对象
     * @param user 注册用户对象
     */
    public UserRegisterEvent(Object source,UserBean user) {
        super(source);
        this.user = user;
    }

    public UserBean getUser() {
        return user;
    }
    
    
}

定义事件监听

@Component
public class RegisterListener implements ApplicationListener<UserRegisterEvent>
{
    /**
     * 实现监听
     * @param userRegisterEvent
     */
    @Override
    @Async
    public void onApplicationEvent(UserRegisterEvent userRegisterEvent) {
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //获取注册用户对象
        UserBean user = userRegisterEvent.getUser();
        //../省略逻辑
        //输出注册用户信息
        System.out.println("注册信息,用户名:"+user.getName()+",密码:"+user.getPassword());
    }
}

 发布事件

@Service
public class UserService
{
    @Autowired
    ApplicationContext applicationContext;

    /**
     * 用户注册方法
     * @param user
     */
    public void register(UserBean user)
    {
        //../省略其他逻辑
        //发布UserRegisterEvent事件
        applicationContext.publishEvent(new UserRegisterEvent(this,user));
    }
}

项目结构

技术分享图片

 

有序监听

使用SmartApplicationListener实现有序监听

异步监听

使用@Async实现异步监听

 

 项目地址:

Spring中的事件驱动模型(机制)

原文:https://www.cnblogs.com/moris5013/p/11119901.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!