CGLib 动态代理Demo
我们再新建一个AmethodClass
来,不实现任何接口。
某个类的方法实现不需要继承任何接口。
如果 Spring 识别到所代理的类没有实现 Interface,那么就会使用 CGLib 来创建动态代理,原理实际上成为所代理类的子类。
有需要执行方法的类:
package com.testcglibProxy;/*** @author liuchaoOvO on 2019/2/21*/
public class AmethodClass
{public void a(){System.out.println("====aaaaaaa===");}public void b(){System.out.println("====bbbbb===");}public static void before(){System.out.println("====before===");}public static void post(){System.out.println("====post===");}
}
cglib 动态代理类,实现MethodInterceptor
package com.testcglibProxy;import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;import java.lang.reflect.Method;/*** @author liuchaoOvO on 2019/2/21*/
public class CGLibProxy implements MethodInterceptor
{//私有静态化实例对象private static volatile CGLibProxy instance;//私有化构造函数private CGLibProxy(){};//公有静态化实例方法public static CGLibProxy getInstance(){if(instance==null){synchronized (CGLibProxy.class){if (instance == null){instance = new CGLibProxy();}}}return instance;}@Overridepublic Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable{//随意找到前置执行方法AmethodClass.before();//重点为cglib动态代理方法的执行Object obj = methodProxy.invokeSuper(o, objects);//随意找到后置执行方法AmethodClass.post();return obj;}private Enhancer enhancer = new Enhancer();//生成为具体需要代理类的子类public <T> T getProxy(Class<T> clazz){enhancer.setSuperclass(clazz);enhancer.setCallback(this);return (T) enhancer.create();}}
生成具体cglib代理类的工厂方法 生成具体的实例
package com.testcglibProxy;/*** @author liuchaoOvO on 2019/2/21*/
public class ProxyFactory
{public static AmethodClass newCGLibProxy() {return CGLibProxy.getInstance().getProxy(AmethodClass.class);}
}
测试
package com.testcglibProxy;/*** @author liuchaoOvO on 2019/2/21*/
public class testMain
{public static void main(String agrs[]){AmethodClass amethodClass= ProxyFactory.newCGLibProxy();amethodClass.a();amethodClass.b();}
}
运行结果
CGLib 动态代理Demo相关推荐
- java jdk动态代理 cglib动态代理demo
最近在研究java动态代理这块,以前也看了很多次java动态代理,感觉一直不是怎么明白,这两天看了看又明白了些,现给出我参考网上写的一个demo jdk动态代理实现: View Code import ...
- 你必须会的 JDK 动态代理和 CGLIB 动态代理
来自:ytao 我们在阅读一些 Java 框架的源码时,基本上常会看到使用动态代理机制,它可以无感的对既有代码进行方法的增强,使得代码拥有更好的拓展性.通过从静态代理.JDK 动态代理.CGLIB 动 ...
- jdk动态代理实例和cglib动态代理实例_CGLib 动态代理 原理解析
JDK 动态代理实现与原理 首先来看一段CGLib代理的测试代码(MethodInterceptor的测试, 其他类型这里不做展开了). Util类的代码在后面给出的码云片段中 public 下面的输 ...
- JDK和cglib动态代理代码示例
JDK和cglib动态代理代码: package com.zhangxueliang.demo.proxy;import java.lang.reflect.InvocationHandler; im ...
- jdk、cglib动态代理代码示例
文章目录 jdk动态代理 实现步骤 代码示例 新建一个接口 新建一个接口的实现类 新建一个代理类 调用测试 cglib动态代理实现 实现步骤 创建一个实现类 新建一个代理类 调用测试 jdk动态代理 ...
- Java 静态代理、Java动态代理、CGLIB动态代理
为什么80%的码农都做不了架构师?>>> Java 的代理就是客户类不再直接和委托类打交道, 而是通过一个中间层来访问, 这个中间层就是代理.为啥要这样呢, 是因为使用代理有 ...
- Java静态代理、动态代理以及CGLIB动态代理
代理模式是java中最常用的设计模式之一,尤其是在spring框架中广泛应用.对于java的代理模式,一般可分为:静态代理.动态代理.以及CGLIB实现动态代理. 对于上述三种代理模式,分别进行说明. ...
- CGLIB 动态代理用例及源码解析
CGLIB 动态代理 参考链接:https://blog.csdn.net/yhl_jxy/article/details/80633194 参考链接:https://www.jianshu.com/ ...
- JDK和CGLIB动态代理原理
JDK动态代理原理解析 一.例子: 1.定义基础接口 public interface HttpApi {String get(String url); } 2.实现类 public class Re ...
最新文章
- 时间和邮箱的正则表达式,获取当前时间函数
- 超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大
- 计算机开机引导的结果是,电脑开机显示引导媒体是怎么回事
- [转载] Google Java代码规范
- 【BZOJ1854】【codevs3358】游戏,二分图最大匹配
- python字符串(in 和not in)(一分钟读懂)
- WEB UI基础八:链接跳转到标准的工单界面
- Android 四大组件学习之Server一
- 华为交换机各种配置实例
- python父亲节快乐_一个“MacBook”新手的Python“笨办法”自学之旅 #第七章:字符串、文本、各种打印、转义序列、手动输入raw_input()...
- 学习语言的方法,你了解几种?
- POI生成动态模板PPT报告
- 谷歌是否让我们变得愚蠢?
- android设置图片亮度分10档,批处理图片同时调整图片亮度批处理图的大小压缩图片裁边(6页)-原创力文档...
- 产品公司解决方案、解决方案公司解决方案,可能你做了一辈子IT你也不知道...
- [4G5G基础学习]:流程 - 4G LTE PLMN选择、扫频、小区搜索、系统消息读取、小区选择过程
- 2012年CSDN高校俱乐部秋季巡讲结案报告
- PostgreSQL WHEN others THEN
- 关于计算机技术的报纸,报社电子计算机中心
- ios-UI-汤姆猫德游戏实现