千家信息网

基于Spring实现观察者模式的方法步骤

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要介绍"基于Spring实现观察者模式的方法步骤",在日常操作中,相信很多人在基于Spring实现观察者模式的方法步骤问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家
千家信息网最后更新 2026年10月31日基于Spring实现观察者模式的方法步骤

这篇文章主要介绍"基于Spring实现观察者模式的方法步骤",在日常操作中,相信很多人在基于Spring实现观察者模式的方法步骤问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"基于Spring实现观察者模式的方法步骤"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

观察者模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新,其主要解决一个对象状态改变给其他关联对象通知的问题,保证易用和低耦合。一个典型的应用场景是:当用户注册以后,需要给用户发送邮件,发送优惠券等操作,如下图所示。

UserService 在完成自身的用户注册逻辑之后,仅仅只需要发布一个 UserRegisterEvent 事件,而无需关注其它拓展逻辑。其它 Service 可以自己订阅 UserRegisterEvent 事件,实现自定义的拓展逻辑。Spring的事件机制主要由3个部分组成。

  • ApplicationEvent:通过继承它,实现自定义事件。另外,通过它的 source 属性可以获取事件源,timestamp 属性可以获得发生时间。

  • ApplicationEventPublisher:通过实现它,来发布变更事件。

  • ApplicationEventListener:通过实现它,来监听指定类型事件并响应动作。这里就以上面的用户注册为例,来看看代码示例。首先定义用户注册事件 UserRegisterEvent。

publicclass UserRegisterEvent extends ApplicationEvent {    /**     * 用户名     */    private String username;    public UserRegisterEvent(Object source) {        super(source);    }    public UserRegisterEvent(Object source, String username) {        super(source);        this.username = username;    }    public String getUsername() {        return username;    }}

然后定义用户注册服务类,实现 ApplicationEventPublisherAware 接口,从而将 ApplicationEventPublisher 注入进来。从下面代码可以看到,在执行完注册逻辑后,调用了 ApplicationEventPublisher的 publishEvent(ApplicationEvent event) 方法,发布了 UserRegisterEvent 事件。

@Servicepublicclass UserService implements ApplicationEventPublisherAware { // <1>    private Logger logger = LoggerFactory.getLogger(getClass());    private ApplicationEventPublisher applicationEventPublisher;    @Override    public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {        this.applicationEventPublisher = applicationEventPublisher;    }    public void register(String username) {        // ... 执行注册逻辑        logger.info("[register][执行用户({}) 的注册逻辑]", username);        // <2> ... 发布        applicationEventPublisher.publishEvent(new UserRegisterEvent(this, username));    }}

创建邮箱Service,实现 ApplicationListener 接口,通过 E 泛型设置感兴趣的事件,实现 onApplicationEvent(E event) 方法,针对监听的 UserRegisterEvent 事件,进行自定义处理。

@Servicepublicclass EmailService implements ApplicationListener { // <1>    private Logger logger = LoggerFactory.getLogger(getClass());    @Override    @Async// <3>    public void onApplicationEvent(UserRegisterEvent event) { // <2>        logger.info("[onApplicationEvent][给用户({}) 发送邮件]", event.getUsername());    }}

创建优惠券Service,不同于上面的实现 ApplicationListener 接口方式,在方法上,添加 @EventListener 注解,并设置监听的事件为 UserRegisterEvent。这是另一种使用方式。

@Servicepublicclass CouponService {    private Logger logger = LoggerFactory.getLogger(getClass());    @EventListener// <1>    public void addCoupon(UserRegisterEvent event) {        logger.info("[addCoupon][给用户({}) 发放优惠劵]", event.getUsername());    }}

看到这里,细心的同学可能想到了发布订阅模式,其实观察者模式于发布订阅还是有区别的,简单来说,发布订阅模式属于广义上的观察者模式,在观察者模式的 Subject 和 Observer 的基础上,引入 Event Channel 这个中介,进一步解耦。图示如下,可以看出,观察者模式更加轻量,通常用于单机,而发布订阅模式相对而言更重一些,通常用于分布式环境下的消息通知场景。

到此,关于"基于Spring实现观察者模式的方法步骤"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

模式 事件 用户 观察者 观察 方法 逻辑 对象 用户注册 订阅 步骤 学习 接口 优惠 监听 代码 优惠券 场景 属性 方式 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 湖南永感互联网科技有限公司 江苏根荣互联网科技 深圳互联网科技公司 互联网金融公司科技 互联网金融科技创新 小马过河互联网科技 深圳期待互联网科技 互联网科技公司介绍 互联网科技公司做什么 成都仁贤领冠互联网科技有限公司 剑昆互联网络科技有限公司临桂 互联网金融科技公司干啥的 互联网科技与大数据专业 亳州好赞互联网科技有限公司 互联网公司黑科技创始人 群盈汇互联网科技有限公司 恒生互联网科技业指数调整周期 中国互联网有什么科技 互联网科技年终奖 互联网安防科技感 互联网科技金融 米客互联网科技 无锡溥仪互联网科技有限公司 科技赋能互联网健康 茂名市互联网科技产业园 中国互联网十大科技股排名 山东大美朱楼互联网科技有限公司 互联网科技手机排行榜 兰石爱特工业互联网科技分公司 现代科技的标志之一的互联网
0