作者:nnngu
项目源代码:https://github.com/nnngu/nguSeckill
首先在编写Service
层代码前,我们应该首先要知道这一层到底是干什么的。
Service
层主要负责业务模块的逻辑应用设计。同样是首先设计接口,再设计其实现的类,接着在Spring
的配置文件中配置其实现的关联。这样我们就可以在应用中调用Service
接口来进行业务处理。Service
层的业务实现,具体要调用到已定义的dao
层的接口,封装Service
层的业务逻辑有利于通用的业务逻辑的独立性和重复利用性,程序显得非常简洁。
在项目中要降低耦合的话,分层是一种很好的概念,就是各层各司其职,尽量不做不相干的事,所以Service
层的话顾名思义就是业务逻辑,处理程序中的一些业务逻辑,以及调用dao
层的代码,这里我们的dao
层就是连接数据库的那一层,调用关系可以这样表达:
View(页面) > Controller(控制层) > Service(业务逻辑) > Dao(数据访问) > Database(数据库)
首先还是接口的设计,设计秒杀商品的接口,在com.nnngu.service.interfaces
包下建立SeckillService.java
接口文件,如下图:
SeckillService.java
文件里面的内容请参照项目的源代码。
建立好接口之后我们要写实现类了,在写实现类的时候我们肯定会碰到一个这样的问题,你要向前端返回json数据的话,你是返回什么样的数据好?直接返回一个数字状态码或者文字?这样设计肯定是不好的,所以我们应该向前端返回一个实体信息json,里面包含了一系列的信息,无论是哪种状态都应该可以应对,既然是与数据库字段无关的类,那就不是PO了,所以我们建立一个DTO数据传输类。关于常见的几种对象我的解释如下:
-
PO:也就是我们为每一张数据库表写一个实体类
-
VO:对某个页面或者展现层所需要的数据,封装成一个实体类
-
BO:业务对象
-
DTO:跟VO的概念有点混淆,也是相当于页面需要的数据封装成一个实体类
-
POJO:简单的无规则java对象
在com.nnngu下建立dto包,然后建立Exposer类,这个类是秒杀时数据库那边处理的结果的对象
Exposer.java
文件里面的内容请参照项目的源代码。
定义秒杀中可能会出现的异常
定义一个基础的异常,所有的子异常继承这个异常SeckillException
package com.nnngu.exception;
/**
* 秒杀基础的异常
* Created by nnngu
*/
public class SeckillException extends RuntimeException {
// 代码省略,请参照项目的源代码
... ...
}
可能会出现秒杀关闭后被秒杀情况,所以建立秒杀关闭异常SeckillCloseException
,需要继承我们前面写的基础异常
package com.nnngu.exception;
/**
* 秒杀已经关闭异常,当秒杀结束就会出现这个异常
* Created by nnngu
*/
public class SeckillCloseException extends SeckillException{
// 代码省略,请参照项目的源代码
... ...
}
定义重复秒杀异常RepeatKillException
package com.nnngu.exception;
/**
* 重复秒杀异常,不需要我们手动去try catch
* Created by nnngu
*/
public class RepeatKillException extends SeckillException{
// 代码省略,请参照项目的源代码
... ...
}
实现Service接口
com.nnngu.service
包下创建SeckillServiceImpl.java
类,具体代码请参照项目的源代码。
在这里我们捕获了运行时异常,这样做的原因就是Spring的事务默认发生了RuntimeException才会回滚,可以检测出来的异常是不会导致事务的回滚的,这样的目的就是你明知道这里会发生异常,所以你一定要进行处理。如果只是为了让编译通过的话,那捕获异常也没意思,所以这里要注意事务的回滚。
然后我们还发现这里存在硬编码的现象,就是返回各种字符常量,例如秒杀成功,秒杀失败等等,这些字符串是可以被重复使用的,而且这样维护起来也不方便,要到处去类里面寻找这样的字符串,所有我们使用枚举类来管理这样状态,在con.nnngu包下建立enums包,专门放置枚举类,然后再建立SeckillStatEnum枚举类。
枚举类SeckillStatEnum.java
的代码请参照项目的源代码。
注入Service
在resources/spring
下建立applicationContext-service.xml
文件,用来配置Service
层
applicationContext-service.xml
的代码请参照项目的源代码。
在这里开启了基于注解的事务,常见的事务操作有以下几种方法:
-
在Spring早期版本中是使用ProxyFactoryBean+XMl方式来配置事务。
-
在Spring配置文件使用tx:advice+aop命名空间,好处就是一次配置永久生效,你无须去关心中间出的问题,不过出错了你很难找出在哪里出了问题。
-
注解@Transactional的方式,注解可以在方法定义,接口定义,类定义。可以在public方法上,但是不能注解在private、final、static等方法上,因为Spring的事务管理默认是使用cglib动态代理的:
- private方法因为访问权限限制,无法被子类覆盖
- final方法无法被子类覆盖
- static时类级别的方法,无法被子类覆盖
- protected方法可以被子类覆盖,因此可以被动态字节码增强
不能被Spring AOP事务增强的方法
1 | 基于JDK的动态代理 | 除了public 以外的所有方法,并且 public static 的方法也不能被增强 |
2 | 基于cglib的动态代理 |
private ,static ,final 的方法 |
Service层的测试
添加测试类SeckillServiceImplTest.java
,如下图:
SeckillServiceImplTest.java
的代码请参照项目的源代码。
测试结果:
测试的方法:public void getSeckillList()
测试结果如下图:
到此,我们成功完成了Service层开发及测试。
相关推荐
基于IDEA+Maven+SSM框架+mysql的高并发的商品秒杀项目.zip基于IDEA+Maven+SSM框架+mysql的高并发的商品秒杀项目.zip基于IDEA+Maven+SSM框架+mysql的高并发的商品秒杀项目.zip基于IDEA+Maven+SSM框架+mysql的高并发的...
【标题】"整合IDEA+Maven+SSM框架商品秒杀项目"是一个基于Java的电商项目,旨在演示如何在IntelliJ IDEA(IDEA)集成开发环境中,使用Maven构建工具以及Spring、SpringMVC和MyBatis(SSM)经典企业级开发框架来实现...
【SpringMVC精品资源——整合IDEA+Maven+SSM框架的高并发商品秒杀项目】 本资源包是针对SpringMVC框架的深入学习,它涵盖了如何在IntelliJ IDEA(IDEA)中整合Maven构建工具以及Spring、SpringMVC、MyBatis(SSM)...
1、基于IDEA+Maven+SSM框架+mysql的高并发商品秒杀项目源码+数据库+项目说明.zip 2、该资源包括项目的全部源码,下载可以直接使用! 3、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设...
SSM框架学习宝典:入门、进阶、精通,全方位代码项目资 一、探索SSM的无限可能 SSM(Spring + Spring MVC + MyBatis)框架作为Java开发中的黄金组合,为开发者提供了强大的技术支持和丰富的功能。本系列资料将带您...
毕设课题:基于IDEA+Maven+SSM框架+mysql的高并发的商品秒杀项目 本资源中的源码都是经过本地编译过可运行的,下载后按照文档配置好环境就可以运行。资源项目源码系统完整,内容都是经过专业老师审定过的,基本...
总结起来,使用IDEA和Maven创建SSM框架涉及了项目创建、依赖管理、框架配置、目录结构设计、各层代码编写等多个环节。了解并掌握这些步骤,可以为Java Web开发打下坚实的基础。而SSO的实现则需要进一步学习相关认证...
【标题】"IDEA+MAVEN+SSM框架 超市管理系统"涉及的主要知识点是Java开发中的集成开发环境IntelliJ IDEA、项目构建工具Maven以及Spring、SpringMVC和MyBatis(SSM)这三大核心框架的集成与应用。这个超市管理系统是一...
IDEA+MAVEN基于ssm框架的数据库增删查改以及用户登录 详情可见博文:https://blog.csdn.net/weixin_42493072/article/details/94403204 开发工具:IntelliJ IDEA 2018、JDK1.8、tomcat 7.0.79、Mysql 5.0、Maven ...
基于IDEA+MySQL+Maven实现SSM框架整合,实现了多条件分页查询、新增、事务、自定义消息转换器、自定义编辑器、拦截器等功能 1. 数据库版本: mysql8.0.26 2. IDEA版本: idea2020 3. JDK版本: jdk1.8.1 4. Tomcat...
以上就是关于"idea+maven+ssm"的详细知识点,涵盖了框架选择、项目构建、主要组件功能、集成开发环境的使用以及关键功能的实现。理解并熟练掌握这些知识点,将有助于提升Java web开发的效率和质量。
idea基于maven搭建SSM框架 JDK1.8 自带逆向生成 自带部分本人使用工具类,如MD5加密 对接安卓返回状态信息等 有问题欢迎密我 QQ 1916172575
2、适用人群:主要针对计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、数学、电子信息等)的同学或企业员工下载使用,具有较高的学习借鉴价值。 3、不仅适合小白学习实战练习,也...
SSM框架是由Spring、Spring MVC和MyBatis三个开源项目组成的集成框架,是Java Web开发中的主流选择。本文将详细讲解如何使用Maven构建工具来搭建一个基于SSM的项目。 首先,我们需要理解SSM框架的各个组成部分: 1...
在这个"idea+maven+ssm环境整合Demo"项目中,我们将探讨如何在IntelliJ IDEA(Idea)集成开发环境中,利用Maven构建工具来管理依赖,并实现SSM框架的集成与配置。 1. **Spring框架**:Spring是Java领域的一个全功能...