详解Java事件编程的使用

编程之家收集整理的这篇文章主要介绍了详解Java事件编程的使用编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Java事件在很多地方都可以使用,合理的使用事件编程,相比常规逻辑的编程,这可达到主次分明,让程序吞吐量即处理能力更强,改动更少,下面我们举一个例子说明如何使用Java使用,需要的朋友可以参考下

Java事件编程

当前在线网店很多,很涉及商品管理和销售的问题,比如:

一,在商品库存管理的商品增加时,我们主要业务时编辑保持商品信息,

同时因商品增加而附带有一些“非主要业务”,如:1,应商品的库存数量等更新,2,热销产品的推广处理等二,在商品产生订单时,我们的主要业务(对买家而言)是建立订单业务,

同时因产生订单而附带有一些不是买家关心的“非主要业务”,如:

1,库存和已售数量的更新

2,发货的准备处理事宜

3,物流的处理事宜

非主要业务我们可以让程序使用多线程异步执行,这样主要业务和非主要业务就完全解耦,

主要业务可以快速完成响应,非主要业务多线程异步执行,提高程序的吞吐量即高处理能力;

同时使用自定义的线程池,有比较好的把控;

下面我们就根据上面的场景需求编写一个例子,看看在Springboot中如何Java的事件编程,

对比一下常规逻辑的编程,和采用Java事件编程的差异。

//常规逻辑的编程 @GetMapping(value="/add") @ResponseBody public String addProduct(Product product) { //增加产品 //应商品的库存数量等更新 //是否为热销产品的推广处理 //其它处理 return "产品增加完成"; }

主要业务是增加产品信息,但是可能会因产品库存或热销产品等其它问题处理而收到影响,

耦合性比较强,如果以后还有其它需求又需要改动程序,问题暴露出来了;

同样,下单也是一样问题,主要业务是买家下单时建立订单,

//常规逻辑的编程 @GetMapping(value="/createOrder") @ResponseBody public String createProductOrder(ProductOrder productOrder) { //收集产品订单信息,保持建立订单 //库存和已售数量的更新 //订单备货处理 //物流处理 return "产品订单建立完成"; }

对买家来说,主要业务是产品下单,后续的库存和已售数量的更新,备货处理,物流处理等不是买家关心的,但是可能会因这些问题处理而受到影响,可能下单失败,耦合性比较强,如果以后还有其它需求又需要改动程序,同样问题暴露出来了;

那怎么建立主次分明的处理逻辑呢,这里用Java事件编程就很好处理这些问题,主次分明,完全解耦,程序改动比较小,程序吞吐量也强,

相关注释在程序非常清楚,所以主要看代码吧;

三,使用Java事件编程,Springboot例子

1,项目结构如下图: 

2,自定义异步执行使用的线程池,参考如下代码

package com.shenzhennba.pro06.eventSource.asyncConfig; import java.io.Serializable; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.task.AsyncTaskExecutor; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; /** * 配置异步任务线程池,然后注入springIOC容器,提供异步任务使用; * @author shenzhenNBA * @since 2021/06/14 */ @Configuration public class AsyncThreadPoolConfig implements Serializable { private static final long serialVersionUID = 20210606010060L; private static final int MAX_POOL_SIZE = 100; private static final int CORE_POOL_SIZE = 20; private static final String THREAD_NAME_PREFIX = "async_task_"; //创建线程池,并指定实例名称 @Bean("asyncTaskExecutor") public AsyncTaskExecutor asyncTaskExecutor() { ThreadPoolTaskExecutor asyncTaskExecutor = new ThreadPoolTaskExecutor(); asyncTaskExecutor.setMaxPoolSize(MAX_POOL_SIZE); asyncTaskExecutor.setCorePoolSize(CORE_POOL_SIZE); asyncTaskExecutor.setThreadNamePrefix(THREAD_NAME_PREFIX); asyncTaskExecutor.initialize(); return asyncTaskExecutor; } }

3,定义业务相关需要的实体或model,参考如下代码: 

package com.shenzhennba.pro06.eventSource.model; import java.io.Serializable; import org.apache.commons.lang.builder.ReflectionToStringBuilder; /** * 商品实体类 * @author shenzhenNBA * @since 2021/06/14 */ public class Product implements Serializable { private static final long serialVersionUID = 20210606010010L; private String categoryCode;//商品类别代码 private String productName; //商品名称 private String productCode; //商品代码 private Double price; //商品单价 private Long addNum; //增加数量 private Long isHotSell=0L; //是否促销,0=不是,1=是 private String createTime; //商品入库时间 public Product() { super(); } //getter / setter 省略... @Override public String toString() { return ReflectionToStringBuilder.toString(this); } }

package com.shenzhennba.pro06.eventSource.model; import java.io.Serializable; import org.apache.commons.lang.builder.ReflectionToStringBuilder; /** * 商品的数量和积分相关实体类 * @author shenzhenNBA * @since 2021/06/14 */ public class ProductNumber implements Serializable { private static final long serialVersionUID = 20210606010020L; private String productCode; //商品代码 private Long storageNum; //商品库存 private Long soldNum; //已收数量 private Long scoreNum; //单个购买赠送积分数 public ProductNumber() { super(); } // getter / setter 省略... @Override public String toString() { return ReflectionToStringBuilder.toString(this); } }

package com.shenzhennba.pro06.eventSource.model; import java.io.Serializable; import java.util.Date; import org.apache.commons.lang.builder.ReflectionToStringBuilder; /** * 商品订单实体类 * @author shenzhenNBA * @since 2021/06/14 */ public class ProductOrder implements Serializable { private static final long serialVersionUID = 20210606010030L; private String orderCode; //订单代码 private String productName; //商品名称 private String productCode; //商品代码 private Double price; //商品单价 private String createTime; //下单时间 private Long scoreNum; //购买赠送积分数 private Long buyNum; //订单购买数量 private Integer isPrepared = 0;//发货准备状态,认0=未准备好,1=已准备好 private Integer isSendOut = 0;//是否已发货,认0=未发,1上一篇:springboot整合freemarker代码自动生成下一篇:Java使用反射操作数组示例 热门搜索

Java编程 

showModelessDialog()使用详解 

java事件 

Genius使用详解 

word域的使用及详解 

相关文章

详解Java事件编程的使用

2021-09-10阅读(8491)评论(0)推荐()

Java事件在很多地方都可以使用,合理的使用事件编程,相比常规逻辑的编程,这可达到主次分明,让程序吞吐量即处理能力更强,改动更少,下面我们举一个例子说明如何使用...

使用记事本编写java程序全过程图解

2021-10-10阅读(3961)评论(0)推荐()

这篇文章主要介绍了如何使用记事本编写java程序,需要的朋友可以参考下

Java使用自定义注解实现为事件源绑定事件监听器操作示例

2021-10-11阅读(5176)评论(0)推荐()

这篇文章主要介绍了Java使用自定义注解实现为事件源绑定事件监听器操作,结合实例形式分析了java自定义注解、注解处理、事件监听与响应等相关操作技巧,需要的朋友...

详解JavaScript中的事件流和事件处理程序

2021-09-17阅读(10362)评论(0)推荐()

事件流指的是从页面中接收事件的顺序,而事件处理程序则是处理事件的响应,接下来我们就来详解JavaScript中的事件流和事件处理程序.

Python GUI编程学习笔记之tkinter事件绑定操作详解

2021-11-06阅读(9514)评论(0)推荐()

这篇文章主要介绍了Python GUI编程学习笔记之tkinter事件绑定操作,结合实例形式分析了Python GUI编程tkinter事件绑定常见操作技巧与使...

Node.js中的事件驱动编程详解

2021-10-05阅读(7783)评论(0)推荐()

这篇文章主要介绍了Node.js中的事件驱动编程详解,本文主要讲解理论性知识,如什么是事件驱动编程、什么是闭包、闭包如何帮助异步编程等知识,需要的朋友可以参考下

Java文件(io)编程之记事本开发详解

2021-10-12阅读(8831)评论(0)推荐()

这篇文章主要为大家详细介绍了Java文件(io)编程之记事本开发,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

取消

有人回复邮件通知

提交评论

© 2021 编程之家 

工信部备案号:琼ICP备2022000316号

总结

以上是编程之家为你收集整理的详解Java事件编程的使用全部内容,希望文章能够帮你解决详解Java事件编程的使用所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

Java相关文章

使用SpringBoot2.x配置静态文件缓存
Java动态代理四种实现方式详解
Eclipse开发JavaWeb项目配置Tomcat的方法步骤
详解领域驱动设计之事件驱动与CQRS
SpringBoot全局配置long转String丢失精度的问题解决
springboot yml定义属性,下文中${} 引用说明
IDEA解决Java:程序包xxxx不存在的问题
编程语言榜单Java与Python并列第二!Julia下滑
MyBatis Log 插件无法显示SQL语句的原因解析
jsp response.sendRedirect()用法详解
使用springboot访问图片本地路径并映射成url
springboot文件虚拟路径映射方式