百木园-与人分享,
就是让自己快乐。

Spring中的观察者模式_监听模式

需求:

执行完某些任务后多渠道发送通知消息

伪代码

消息体

package com.wanqi.pojo;

/**
 * @Description TODO
 * @Version 1.0.0
 * @Date 2022/10/28
 * @Author wandaren
 */
public class MyMessage {
    private String title;
    private String msg;

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    @Override
    public String toString() {
        return \"MyMessage{\" +
                \"title=\'\" + title + \'\\\'\' +
                \", msg=\'\" + msg + \'\\\'\' +
                \'}\';
    }

    public MyMessage(String title, String msg) {
        this.title = title;
        this.msg = msg;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }
}

事件对象

package com.wanqi.event;

import org.springframework.context.ApplicationEvent;
import org.springframework.stereotype.Component;

/**
* @Description TODO
* @Version 1.0.0
* @Date 2022/10/28
* @Author wandaren
*/
public class OrderEvent extends ApplicationEvent {

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

事件消费者(发送渠道)

package com.wanqi.event;

import com.wanqi.pojo.MyMessage;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;

/**
 * @Description TODO
 * @Version 1.0.0
 * @Date 2022/10/28
 * @Author wandaren
 */
@Component
public class EmailMessage implements ApplicationListener<OrderEvent> {
    @Override
    public void onApplicationEvent(OrderEvent event) {
        final Object source = event.getSource();
        if (source instanceof MyMessage) {
            System.out.println(\"邮件: \" + ((MyMessage) source).getTitle() + \"---\" + ((MyMessage) source).getMsg());
        }
    }
}

事件消费者(发送渠道)

package com.wanqi.event;

import com.wanqi.pojo.MyMessage;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;

/**
 * @Description TODO
 * @Version 1.0.0
 * @Date 2022/10/28
 * @Author wandaren
 */
@Component
public class WXMessage implements ApplicationListener<OrderEvent> {
    @Override
    public void onApplicationEvent(OrderEvent event) {
        final Object source = event.getSource();
        if(source instanceof MyMessage){
            System.out.println(\"微信: \" + ((MyMessage) source).getTitle() + \"---\" +((MyMessage) source).getMsg());
        }
    }
}

事件生产者

package com.wanqi.service;

import com.wanqi.event.OrderEvent;
import com.wanqi.pojo.MyMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;

/**
 * @Description TODO
 * @Version 1.0.0
 * @Date 2022/10/28
 * @Author wandaren
 */
@Service
public class MyTest {
    ApplicationContext applicationContext;

    @Autowired
    public MyTest(ApplicationContext applicationContext) {
        this.applicationContext = applicationContext;
    }

    public void msg(){
        System.out.println(\"任务执行完成。。。。。\");

        OrderEvent orderEvent = new OrderEvent(new MyMessage(\"发送消息啦\", \"xxxxxxxxxxxx\"));
        //传播通道
        applicationContext.publishEvent(orderEvent);
    }
}

测试

package com.wanqi;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class DesignPatternApplicationTests {
    @Autowired
    com.wanqi.service.MyTest test;

    @Test
    void contextLoads() {
        test.msg();
    }

}

image.png


来源:https://www.cnblogs.com/wandaren/p/16835157.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » Spring中的观察者模式_监听模式

相关推荐

  • 暂无文章