cglib 动态代理 解释

简介:

上篇文章说的JDK的动态代理,下面我们来讲讲cglib动态代理的实现。

其实你会发现JDK的动态代理,是对接口的,没有对普通的类,怎么办,CGLIB可以解决的这个事,你会

发现啊,原声的总是太麻烦的,很多框架都是在原声的基础上做一些文章,比如Netty,对nio封装,简化

开发,curator对zookeeper封装,简化api开发,都是简化后然后开发出一些新技能,稍大点的公司,干脆

就最市场上留出的框架自己开发出适合自己公司技术体系的框架。


上代码吧,

import net.sf.cglib.proxy.Enhancer;

import net.sf.cglib.proxy.MethodInterceptor;

import net.sf.cglib.proxy.MethodProxy;


CGLIB增强主要有这几个类,ENhancer,MethodInterceptor,MethodProxy


public class CglibTest {


//普通类

@Test

public void testCglibProxy() {

final NewsSpider newsSpider = new NewsSpider();

Enhancer enhancer = new Enhancer();

enhancer.setSuperclass(newsSpider.getClass());

enhancer.setCallback(new MethodInterceptor() {

@Override

public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {

// TODO Auto-generated method stub

System.out.println(" 在调动方法处理前做。。。。。。。。。 ");

Object object = method.invoke(newsSpider, args);

System.out.println(" 在调动方法处理后做。。。。。。。。。 ");

return object;

}

});

NewsSpider ns = (NewsSpider) enhancer.create();

ns.createNewsSpider("细节--");

}

//接口

@Test

public void testCgligInterfaceProxy() {

final SpiderOrderImpl spiderOrder = new SpiderOrderImpl();

Enhancer en = new Enhancer();

en.setSuperclass(SpiderOrder.class); //设置接口类  cglib增强类

en.setCallback(new MethodInterceptor() {

@Override

public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {

// TODO Auto-generated method stub

System.out.println(" 在调动方法处理前做。。。。。。。。。 ");

Object object = method.invoke(spiderOrder, args);

System.out.println(" 在调动方法处理后做。。。。。。。。。 ");

return object;

}

});

SpiderOrder enSpiderOrder = (SpiderOrder) en.create(); 

enSpiderOrder.crawlingSpider();

}

}


如果有找不到那个相关类,在我的上一篇文章里有写到。


spring的aop两个代理底层基础是这样的,那么我们下片文章会说说spring aop,是怎么回事,有些人只会用spring框架,项目框架

搭建好了,能用,再加上业务多,很多开发人员很少有去真正静下心来,学学一些基础知识。



本文转自 豆芽菜橙 51CTO博客,原文链接:http://blog.51cto.com/shangdc/1914333

相关文章
|
5月前
|
Java
分析cglib动态代理的实现(下)
分析cglib动态代理的实现(下)
28 0
|
5月前
|
缓存 Java
分析cglib动态代理的实现(上)
分析cglib动态代理的实现(上)
38 0
|
10月前
|
Java 索引 Spring
静态代理?动态代理?JDK动态代理和CGLIB包实现动态代理的区别
什么是静态代理?什么是动态代理?JDK动态代理和CGLIB包实现动态代理的区别
91 1
静态代理?动态代理?JDK动态代理和CGLIB包实现动态代理的区别
|
11月前
|
Java 测试技术 Spring
动态代理:Cglib原理讲解
动态代理:Cglib原理讲解
79 1
|
11月前
|
缓存 Java 测试技术
动态代理:JDK动态代理源码学习
动态代理:JDK动态代理源码学习
47 1
|
设计模式 Java 数据安全/隐私保护
剖析代理模式及Java两种动态代理(JDK动态代理和CGLIB动态代理)
本文详述了代理模式以及我们经常接触到的两种具体实现(JDK动态代理和CGLIB动态代理),为读者理解代理模式、JDK动态代理和CGLIB动态代理提供帮助
136 0
剖析代理模式及Java两种动态代理(JDK动态代理和CGLIB动态代理)
|
Java 索引
jdk动态代理和cglib动态代理的原理分析(下)
jdk动态代理和cglib动态代理的原理分析(下)
195 0
jdk动态代理和cglib动态代理的原理分析(下)
|
设计模式 Java 索引
jdk动态代理和cglib动态代理的原理分析(上)
jdk动态代理和cglib动态代理的原理分析(上)
jdk动态代理和cglib动态代理的原理分析(上)
|
Java Maven Spring
静态代理、动态代理(JDK动态代理,Cglib动态代理)(2)
静态代理、动态代理(JDK动态代理,Cglib动态代理)(2)
99 0
|
Java
静态代理、动态代理(JDK动态代理,Cglib动态代理)(3)
静态代理、动态代理(JDK动态代理,Cglib动态代理)(3)
93 0