-
秒杀业务接口的设计应该站在“使用者”的角度,从四个方面着手:①方法定义的粒度②参数③返回值类型④可能抛出异常的类型; 在编写接口的过程中,设计接口方法名以及方法参数的时候,更多的是考虑返回值类型,这里封装了DTO(也就是数据传输层),根据具体的方法来设计返回的参数类型,以及有可能抛出的异常,并对异常进行定义。在有可能抛出异常的地方,抛异常的时候,除了抛出“最大”的异常之外,还应该提醒用户这里可能抛出的子类异常,使得在后续编写代码的过程中正确处理这些异常。 在执行秒杀的方法中用到了MD5加密进行用户信息以及秒杀信息的校验。 业务接口截图2查看全部
-
秒杀业务接口的设计应该站在“使用者”的角度,从四个方面着手:①方法定义的粒度②参数③返回值类型④可能抛出异常的类型; 在编写接口的过程中,设计接口方法名以及方法参数的时候,更多的是考虑返回值类型,这里封装了DTO(也就是数据传输层),根据具体的方法来设计返回的参数类型,以及有可能抛出的异常,并对异常进行定义。在有可能抛出异常的地方,抛异常的时候,除了抛出“最大”的异常之外,还应该提醒用户这里可能抛出的子类异常,使得在后续编写代码的过程中正确处理这些异常。 在执行秒杀的方法中用到了MD5加密进行用户信息以及秒杀信息的校验。 业务接口截图1查看全部
-
java异常分编译期异常和运行期异常,运行期异常不需要手工try-catch,spring的的声明式事务只接收运行期异常回滚策略,非运行期异常不会帮我们回滚 秒杀相关业务异常基类查看全部
-
java异常分编译期异常和运行期异常,运行期异常不需要手工try-catch,spring的的声明式事务只接收运行期异常回滚策略,非运行期异常不会帮我们回滚 秒杀关闭异常查看全部
-
java异常分编译期异常和运行期异常,运行期异常不需要手工try-catch,spring的的声明式事务只接收运行期异常回滚策略,非运行期异常不会帮我们回滚 重复秒杀异常查看全部
-
dto封装秒杀执行后结果查看全部
-
dto表示与业务本身不相关的实体类,一般用来表示web界面需要展示的实体查看全部
-
DAO以下不包含业务逻辑:接口设计 + SQL编写 代码和SQL的分离,方便Review 业务逻辑在Service层实现查看全部
-
配置声明式事务 1、配置事务管理器 2、配置基于注解的声明式事务 3、@Transactional 使用注解控制事务方法的有点 1.开发团队达成一致约定,明确标注事务方法的编程风格。 2.保证事务方法的执行时间尽可能短,不要穿插其他网络操作RPC/HTTP请求或者剥离到事务方法外部 3.不是所有的方法都需要事务,如只有一条修改操作,只读操作不需要事务控制查看全部
-
声明式事务: 声明式事务目的在于解脱繁琐的关于事务的代码, 在实际的开发中,不需要关心事务的开启、提交、回滚、关闭等等,而是直接交由第三方框架托管,比如spring。 第二中方法:tx:advice+aop命名空间(一次配置永久生效) 第三中方法:@Transactional(注解控制) 本例推荐使用第三种基于注解的声明式事务的方法,这种方式的优点在于,当看到@Transcation注解的时候知道这是一个与事务有关的方法,此时就会自觉遵守一些关于事务开发的规范,有利于程序的进一步维护。 Spring在抛出运行期异常时会回滚事务,两点注意: 1 非运行期异常时要注意,防止出现部分成功部分失败的情况(所以自己封装异常时,在需要的地方要implements RuntimeException)。 2 小心使用try-catch:被try-catch块包裹起来的异常Spring也是感觉不到的。查看全部
-
扫描service包下所有使用注解的类型 <context:component-scan base-package="org.seckill.service"/> @component 标识是一个组件,不知道到底是什么组件 如果知道具体是哪个组件,就用下面的具体标识 @Service 就是一个service @Dao dao @Controller web层入口 在service的impl类中添加annotation。首先为class添加@service,其次为初始化对象,如private SeckillDao seckillDao添加@Autowired //@Resource, @Inject:j2ee规范的注解,@Autowired:spring自身定义的注解查看全部
-
Spring-IOC注入方式和场景查看全部
-
public enum SeckillStateEnum { SUCCESS(1, “秒杀成功”), END(0, “秒杀结束”), REPEAT_KILL(-1, “重复秒杀”), INNER_ERROR(-2, “系统异常”), DATA_REWRITE(-3, “数据篡改”); private int state; private String stateInfo; SeckillStateEnum(int state, String stateInfo) { this.state = state; this.stateInfo = stateInfo; } public int getState() { return state; } public String getStateInfo() { return stateInfo; } public static SeckillStateEnum stateOf(int index) { for (SeckillStateEnum state : values()) { if (state.getState() == index) { return state; } } return null; } }查看全部
-
IOC在本项目中的使用查看全部
-
一个方法需要修改两条以上的数据时,建议使用事务查看全部
举报
0/150
提交
取消