博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
对SpringAop的思考之基于cglib的动态代理
阅读量:6915 次
发布时间:2019-06-27

本文共 1351 字,大约阅读时间需要 4 分钟。

hot3.png

说完基于jdk的动态代理,来说说基于cglib的动态代理吧。

首先创建目标类:

public class GreetImp {	public void sayHello(String name) {		// TODO Auto-generated method stub		System.out.println("hello"+name);	}}

接着,我们来写基于cglib的动态代理类吧

public class DyemCglibProxy implements MethodInterceptor{	private static DyemCglibProxy dyemCglibProxy=new DyemCglibProxy();		private DyemCglibProxy()	{			}		public static DyemCglibProxy getInstance()	{		return dyemCglibProxy;	}		public 
 T getProxy(Class clazz) { return (T) Enhancer.create(clazz, this); } public Object intercept(Object arg0, Method arg1, Object[] arg2, MethodProxy arg3) throws Throwable { // TODO Auto-generated method stub Object result; System.out.println("调用前"); result=arg3.invokeSuper(arg0,arg2); System.out.println("调用后"); return result; }}

我们对这个代理类做了一下处理,让我们的这个代理类变成单例。通过以下代码进行代理。

public static void main(String[] args) {		Greeting g=DyemCglibProxy.getInstance().getProxy(GreetImp.class);		g.sayHello("小明");	}

那么,这基于jdk的动态代理和基于cglib的动态代理的区别到底在哪呢?

我们可以比较下这两种代理所代理的目标类的区别,基于jdk的动态代理所代理的目标类实现接口,而基于cglib的动态的目标类去没有实现接口,只是单纯的类。由此,是不是觉得基于cglib的动态代理是不是更加强大一点啊。

问题来了,既然cglib动态代理比jdk代理强大,为什么cglib的动态代理却不能取代jdk的动态代理呢?据一位大牛说,CGLib创建代理的速度比较慢,但创建代理后运行的速度却非常快,而jdk的代理却相反。如果在运行的时候不断的用CGLib去创建代理,系统的性能会大大的降低,所以建议一般在系统初始化的时候用CGLib去创建代理,并放入Spring的ApplicationContext中以备后用。

转载于:https://my.oschina.net/littlestyle/blog/533906

你可能感兴趣的文章
CentOS 6.2安装VNC Server
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
binlog-rollback.pl 在线恢复update 和delete不加条件误操作sql
查看>>
2015.12.31
查看>>
tcpdump couldn't find user 'tcpdump' 报错备忘
查看>>
nginx日志分割脚本
查看>>
程序员该如何学习和积累
查看>>
linux中RAID详解
查看>>
Win7 CMD大全
查看>>
Spark初识入门Core (一)
查看>>
How to find files in Linux using 'locate'
查看>>
redis常用命令
查看>>
实例代码讲解javascript读写Cookie函数知识
查看>>
DNS服务器在网络中的应用
查看>>
我的友情链接
查看>>
二进制免编译MYSQL主从配置
查看>>
Cisco UCS TroubleShooting
查看>>
ip nat
查看>>
Android 外接sdk之支付宝
查看>>