概述
概述:
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实现)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复