![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
代理
ConstXiong
记录编程实践...
展开
-
Chapter 2、不使用代理
为了满足两个需求 1、打印每个请求从开始到结束的耗时 2、校验某些请求的当前用户是否登录 可以在 Service 的实现类 ServiceImpl 中改造,增加耗时打印和校验登录代码。 //耗时统计 long start = System.currentTimeMillis();//计时开始 ... long end = System.currentTimeMillis();//计...原创 2019-05-30 14:01:01 · 4904 阅读 · 0 评论 -
Java 中的代理
Chapter 1、为什么要加代理? Chapter 2、不使用代理 Chapter 3、静态代理 Chapter 4、JDK 动态代理 Chapter 5、CGLib 动态代理 Chapter 6、使用 Spring aop 模块完成动态代理功能 完整源码:https://github.com/ConstXiong/xtools cxproxy项目 【Java面试...原创 2019-05-23 19:26:17 · 5752 阅读 · 2 评论 -
Chapter 1、为什么要加代理?
思考一下,如果要在Java Web项目中完成两个功能: 1、打印每个请求从开始到结束的耗时 2、校验某些请求的当前用户是否登录 按照常规思路,解决办法就是 1、在每个请求的 controller 代码的开始和结尾都记录时间,最后打印一下这个时间差 2、在每个需要校验的请求代码中,加上校验当前用户是否登录的代码 这样: 修改了原来的代码逻辑 每个涉及的点都需要改动,改动量...原创 2019-05-28 12:36:31 · 5323 阅读 · 0 评论 -
Chapter 6、使用 Spring aop 模块完成动态代理功能
众所周知,spring aop 的模块的实现,借助动态代理了。那么我们看一下,如何使用spring aop模块,完成 Chapter1 中的两个需求 打印每个请求从开始到结束的耗时 校验某些请求的当前用户是否登录 1、增加对 spring aop 模块的pom依赖 <dependency> <groupId>org.springframework</...原创 2019-06-06 15:04:16 · 5640 阅读 · 0 评论 -
Chapter 3、静态代理
为了不修改原 ServiceImpl 的业务代码,而对其进行扩充(统计、打印耗时)和拦截(判断是否登录),可以使用代理。 代码如下 1、让 ServiceImpl 处理原先核心的业务逻辑 package constxiong.cxproxy.chapter3.service; import java.util.HashMap; import java.util.Map; /** * ...原创 2019-06-02 00:32:14 · 4687 阅读 · 0 评论 -
Chapter 4、JDK 动态代理
为了解决静态代理的带来的问题: 代理类需要实现与目标类一样的接口,会导致代理类数量较多,不易维护 一旦接口增加方法,目标类和代理类都需要维护 JDK 提供了动态代理,实现动态代理满足下列条件: 代理类实现InvocationHandler 接口 使用 Proxy.newProxyInstance(ClassLoader loader,Class<?>[] interfaces...原创 2019-06-02 22:41:14 · 7773 阅读 · 0 评论 -
Chapter 5、CGLib 动态代理
为了解决 JDK 的动态代理无法代理不实现接口的类的问题,可以使用 CGLib 的实现动态代理。 CGLib(Code Generator Library)是一个强大的、高性能的代码生成库。底层使用了ASM(一个短小精悍的字节码操作框架)来操作字节码生成新的类。 详细关于 CGLib 的介绍 下面我们基于 CGLib 实现 打印每个请求从开始到结束的耗时 校验某些请求的当前用户是否...原创 2019-06-04 17:27:43 · 5823 阅读 · 0 评论