
Java 代理
Java 静态、动态代理、cglib 和 spring 中的代理
ConstXiong
记录编程实践...
展开
-
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 · 5799 阅读 · 2 评论 -
Chapter 1、为什么要加代理?
思考一下,如果要在Java Web项目中完成两个功能:1、打印每个请求从开始到结束的耗时2、校验某些请求的当前用户是否登录按照常规思路,解决办法就是1、在每个请求的 controller 代码的开始和结尾都记录时间,最后打印一下这个时间差2、在每个需要校验的请求代码中,加上校验当前用户是否登录的代码这样:修改了原来的代码逻辑 每个涉及的点都需要改动,改动量...原创 2019-05-28 12:36:31 · 5379 阅读 · 0 评论 -
Chapter 2、不使用代理
为了满足两个需求1、打印每个请求从开始到结束的耗时2、校验某些请求的当前用户是否登录可以在 Service 的实现类 ServiceImpl 中改造,增加耗时打印和校验登录代码。//耗时统计long start = System.currentTimeMillis();//计时开始...long end = System.currentTimeMillis();//计...原创 2019-05-30 14:01:01 · 4961 阅读 · 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 · 4726 阅读 · 0 评论 -
Chapter 4、JDK 动态代理
为了解决静态代理的带来的问题:代理类需要实现与目标类一样的接口,会导致代理类数量较多,不易维护 一旦接口增加方法,目标类和代理类都需要维护JDK 提供了动态代理,实现动态代理满足下列条件:代理类实现InvocationHandler 接口 使用 Proxy.newProxyInstance(ClassLoader loader,Class<?>[] interfaces...原创 2019-06-02 22:41:14 · 7823 阅读 · 0 评论 -
Chapter 5、CGLib 动态代理
为了解决 JDK 的动态代理无法代理不实现接口的类的问题,可以使用 CGLib 的实现动态代理。CGLib(Code Generator Library)是一个强大的、高性能的代码生成库。底层使用了ASM(一个短小精悍的字节码操作框架)来操作字节码生成新的类。详细关于 CGLib 的介绍下面我们基于 CGLib 实现打印每个请求从开始到结束的耗时 校验某些请求的当前用户是否...原创 2019-06-04 17:27:43 · 5884 阅读 · 0 评论 -
Chapter 6、使用 Spring aop 模块完成动态代理功能
众所周知,spring aop 的模块的实现,借助动态代理了。那么我们看一下,如何使用spring aop模块,完成Chapter1 中的两个需求打印每个请求从开始到结束的耗时 校验某些请求的当前用户是否登录1、增加对 spring aop 模块的pom依赖<dependency> <groupId>org.springframework</...原创 2019-06-06 15:04:16 · 5695 阅读 · 0 评论