CGLIG动态代理 基础

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CGLIG动态代理 基础相关的知识,希望对你有一定的参考价值。


上篇文章说的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框架,项目框架

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




本文出自 “10093778” 博客,请务必保留此出处http://10103778.blog.51cto.com/10093778/1914333

以上是关于CGLIG动态代理 基础的主要内容,如果未能解决你的问题,请参考以下文章

动态代理的分类和各自的实现方式

设计模式-代理模式JAVA实现

springboot如何设置aopenproxy

动态代理_基础版

Spring中AOP技术基础——静态代理动态代理(JDK动态代理)CGLIB代理

Spring中AOP技术基础——静态代理动态代理(JDK动态代理)CGLIB代理