Chapter 2、不使用代理
为了满足两个需求
1、打印每个请求从开始到结束的耗时
2、校验某些请求的当前用户是否登录
可以在 Service 的实现类 ServiceImpl 中改造,增加耗时打印和校验登录代码。
//耗时统计
long start = System.currentTimeMillis();//计时开始
...
long end = System.currentTimeMillis();//计时结束
System.out.println("耗时:" + (end - start) + "毫秒");//打印耗时
/*** 模拟 当前用户是否登录*/
private boolean checkIsLogined() {Random r = new Random();int i = r.nextInt(10);if (i % 2 == 0) {System.out.println("已登录");return true;}System.out.println("未登录");return false;
}
完整代码:
package constxiong.cxproxy.chapter2.service;import java.util.HashMap;
import java.util.Map;
import java.util.Random;/*** 服务接口实现* @author ConstXiong* @date 2019-05-29 11:02:15*/
public class ServiceImpl implements Service {@Overridepublic boolean login(String username, String password) {long start = System.currentTimeMillis();//计时开始simulateDaOperation(100);System.out.println("用户名:" + username + ", 密码:" + password + " 登录成功");long end = System.currentTimeMillis();//计时结束System.out.println("耗时:" + (end - start) + "毫秒");//打印耗时return true;}@Overridepublic Map<String, Object> getUserInfo(String username) {long start = System.currentTimeMillis();//计时开始Map<String, Object> userInfo = null;//校验是否登录if (checkIsLogined()) {userInfo = new HashMap<String, Object>();simulateDaOperation(150);userInfo.put("username", username);userInfo.put("sex", "男");userInfo.put("age", 18);System.out.println("用户名:" + username + ", 获取用户信息:" + userInfo);}long end = System.currentTimeMillis();//计时结束System.out.println("耗时:" + (end - start) + "毫秒");//打印耗时return userInfo;}/*** 模拟 当前用户是否登录*/private boolean checkIsLogined() {Random r = new Random();int i = r.nextInt(10);if (i % 2 == 0) {System.out.println("已登录");return true;}System.out.println("未登录");return false;}/*** 模拟数据库操作,休眠* @param millis 毫秒数*/private void simulateDaOperation(long millis) {try {Thread.sleep(millis);} catch (InterruptedException e) {e.printStackTrace();}}}
未登录打印:
用户名:ConstXiong, 密码:123456 登录成功
耗时:100毫秒
未登录
耗时:1毫秒
已登录打印:
用户名:ConstXiong, 密码:123456 登录成功
耗时:100毫秒
已登录
用户名:ConstXiong, 获取用户信息:{sex=男, age=18, username=ConstXiong}
耗时:152毫秒
完整源码:https://github.com/ConstXiong/xtools cxproxy项目 chapter2
思考:
这种做法的缺点很明显:每次需求变更,核心的业务代码就需要改动,这块就得重测。
有没有做法可以不用修改核心业务代码,也能完成两个功能?有,使用代理。
【Java面试题与答案】整理推荐
- 基础与语法
- 集合
- 网络编程
- 并发编程
- Web
- 安全
- 设计模式
- 框架
- 算法与数据结构
- 异常
- 文件解析与生成
- Linux
- MySQL
- Oracle
- Redis
- Dubbo
Chapter 2、不使用代理相关推荐
- Chapter 4、JDK 动态代理
为了解决静态代理的带来的问题: 代理类需要实现与目标类一样的接口,会导致代理类数量较多,不易维护 一旦接口增加方法,目标类和代理类都需要维护 JDK 提供了动态代理,实现动态代理满足下列条件: 代理类 ...
- Chapter 5、CGLib 动态代理
为了解决 JDK 的动态代理无法代理不实现接口的类的问题,可以使用 CGLib 的实现动态代理. CGLib(Code Generator Library)是一个强大的.高性能的代码生成库.底层使用了 ...
- Chapter 7 代理模式
代理模式:为其它对象提供一种代理以控制对这个对象的访问. 代码: package xiao; class Girl{ private String name; public void setName( ...
- Chapter 1 快速搭建-服务的注册与发现(Eureka)
Chapter 1 快速搭建-服务的注册与发现(Eureka) 一.Spring Cloud简介 为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代 ...
- 【翻译】Xv6 book Chapter 8:File system
Chapter 8 File system 文件系统的目的是阻止和存储数据.文件系统持久地支持在用户和应用之间分享数据,所以这些数据在重启之后仍然是可以得到的. xv6的文件系统提供了类Unix的文件 ...
- 《Migrating to Cloud-Native Application Architectures》学习笔记之Chapter 3. Migration Cookbook...
2019独角兽企业重金招聘Python工程师标准>>> New Features as Microservices 微服务的新特性 想从单体应用走向微服务,第一步就是不再王单体应用中 ...
- SSH Chapter 04 Hibernate 入门
SSH Chapter 04 Hibernate入门 笔记 Hibernate 知识体系图: 本章目标: 理解类和表的映射关系 掌握单表的增删改 掌握按主键查询 理解持久化对象的状态及其转换 技术内容 ...
- Umbral:新型分散式密钥管理系统的代理重加密方案
前言 现在,我们非常高兴地宣布,我们在定义( https://github.com/nucypher/umbral-doc/blob/master/umbral-doc.pdf )和实现( https ...
- SSM Chapter 05 Spring 核心概念
SSM Chapter 05 Spring 核心概念 笔记 本章目标: 理解Spring IoC的原理 掌握Spring IoC的配置 理解Spring AOP的原理 掌握Spring AOP的配置 ...
最新文章
- 删除链表的中间节点和a/b处的节点
- 举例说明信息熵、互信息的计算过程
- MatConvnet中集成的损失函数(孪生网络的思考)
- HDU4267(2012年长春站)
- Java学习笔记_身份验证机制
- 前端性能优化篇——浏览器http同域名并发请求对限制
- java中Map ListE的用法
- js中定义用字符串拼接起来的变量名的变量
- 文档级关系抽取方法总结
- 不忘初心,不负韶华——2021年中会议发言之一
- Debian5.0自动挂载U盘 - 使用pmount
- 量子计算机预测未来,太厉害了吧?这台量子计算机能预测16种不同的未来!
- 常用Linux命令--CPU和GPU查看
- 计算机启动时默认输入法设置,每次开机都需要重设,教你电脑输入法怎么设置默认模式...
- ADB远程桌面连接本地手机
- 华硕 fx-pro(GL552VW) 修改BIOS,关闭超线程
- 专题·快速沃尔什变换(FWT)【including FWT,洛谷P4717【模板】快速沃尔什变换
- 金蝶K3提取供应商信息生成在线Web页面供应商信息一览表
- c语言源码什么意思,请问C语言源代码什么意思?
- 网络天气预报项目笔记(Qt)