我是靠谱客的博主 痴情小懒猪,最近开发中收集的这篇文章主要介绍Spring中的观察者模式(发布订阅模式)(基于SpringBoot实现),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

概述:

  spring中的事件机制涉及到者几个类文件 :ApplicationEvent(事件类型)、ApplicationListener(事件监听类)、ApplicationEventPublisher(事件发布类)。

  ApplicationEvent:继承jdk Utill包中的 EventObject。

  ApplicationListener :接口继承了utill 包中的EventListener接口,泛型参数E必须继承ApplicationEvent类。

  ApplicationEventPublisher: 事件发布接口 ,实现类很多,其中子类ApplicationContext,发布事件就用ApplicationContext类去发布。

举例:

  在实际开发中,有一个这样的例子,当下单成功后会发送手机短信、发送绑定邮箱、微信、等

 

示例代码:

 

pom文件

 1   <parent>
 2
<groupId>org.springframework.boot</groupId>
 3
<artifactId>spring-boot-starter-parent</artifactId>
 4
<version>1.5.9.RELEASE</version>
 5
</parent>
 6
<dependencies>
 7
<dependency>
 8
<groupId>org.springframework.boot</groupId>
 9
<artifactId>spring-boot-starter-web</artifactId>
10
</dependency>
11
<dependency>
12
<groupId>org.springframework.boot</groupId>
13
<artifactId>spring-boot-starter-test</artifactId>
14
<scope>test</scope>
15
</dependency>
16
</dependencies>

 

 

定义事件:

 1 /**
 2  * 定义订单事件
 3
*/
 4 public class OrderEvent extends ApplicationEvent {
 5
 6
private String message;
 7
 8
/**
 9 
* Create a new ApplicationEvent.
10 
*
11 
* @param source the object on which the event initially occurred (never {@code null})
12
*/
13
public OrderEvent(Object source, String message) {
14
super(source);
//强制调用
15
this.message = message;
16 
}
17
18 
@Override
19
public Object getSource() {
20
return super.getSource();
21 
}
22
23
public String getMessage() {
24
return message;
25 
}
26
27
public void setMessage(String message) {
28
this.message = message;
29 
}
30 }

 

短信监听:

 1 /**
 2  * 短信监听(异步执行)
 3
*/
 4 @Component
 5 public class SmsListener implements ApplicationListener<OrderEvent> {
 6
 7
 8
private static final Logger logger = Logger.getLogger(SmsListener.class);
 9
10 
@Override
11
@Async
//异步
12
public void onApplicationEvent(OrderEvent event) {
13
System.out.println(Thread.currentThread() + "...短信监听到..." + event.getMessage()+ "......" + event.getSource());
14 
}
15 }

 

邮件监听:

 1 /**
 2  * @Author zechuang
 3  * @Date 2019/8/21
 4
*/
 5 @Component
 6 public class EmailListener implements ApplicationListener<OrderEvent> {
 7
 8
private static final Logger logger = Logger.getLogger(EmailListener.class);
 9
10 
@Override
11 
@Async
12
public void onApplicationEvent(OrderEvent event) {
13
System.out.println(Thread.currentThread() + "...邮件监听到..." + event.getMessage()+ "......" + event.getSource());
14 
}
15 }

 

springBoot启动类

1 @SpringBootApplication
2 @EnableAsync
//开启异步
3 public class MySpringBootApplication {
4
5
public static void main(String[] args) {
6
SpringApplication.run(MySpringBootApplication.class, args);
7 
}
8 }

 

测试:

 1 @RunWith(SpringRunner.class)
 2 @SpringBootTest(classes = MySpringBootApplication.class)
 3 public class ObserverTest {
 4
 5 
@Autowired
 6
private ApplicationContext applicationContext;
 7
 8 
@Test
 9
public void test01(){
10
OrderEvent order = new OrderEvent(this, "用户下单成功");
11 
applicationContext.publishEvent(order);
12
System.out.println("....................over........................");
13 
}
14 }

 

测试结果:

....................over........................
Thread[SimpleAsyncTaskExecutor-1,5,main]...邮件监听到...用户下单成功......com.test.ObserverTest@19dd04d
Thread[SimpleAsyncTaskExecutor-2,5,main]...短信监听到...用户下单成功......com.test.ObserverTest@19dd04d

 

转载于:https://www.cnblogs.com/zchok/p/11388932.html

最后

以上就是痴情小懒猪为你收集整理的Spring中的观察者模式(发布订阅模式)(基于SpringBoot实现)的全部内容,希望文章能够帮你解决Spring中的观察者模式(发布订阅模式)(基于SpringBoot实现)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部