java的动态代理只能对接口进行代理,如果一个类没有实现任何接口,则需要使用Cglib的动态代理技术,
cglib的一种实现简单地讲就是一句话:为代理类创建一个子类,并拦截这个子类对父类方法的调用。
这么说比较抽象,下面三个简单的类实现了cglib的动态代理
入口类:
TestCglibMain.java
package cn.java.cglibproxy; public class TestCglibMain { public static void main(String[] args) { //初始化代理类 CglibProxy proxy = new CglibProxy(); //创建代理子类 TestCglib test = (TestCglib)proxy.getProxy(TestCglib.class); //调用父类方法 test.pringSomthing(); } }
被代理类:
TestCglib.java
package cn.java.cglibproxy; public class TestCglib { public void pringSomthing(){ System.out.println("printSomthing is now!!!"); } }
cglib代理实现类:
CglibProxy.java
package cn.java.cglibproxy; import java.lang.reflect.Method; import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; public class CglibProxy implements MethodInterceptor { private Enhancer enhancer = new Enhancer(); public Object getProxy(Class<TestCglib> clazz){ enhancer.setSuperclass(clazz); enhancer.setCallback(this); return enhancer.create(); } public Object intercept(Object obj, Method method, Object[] arg2, MethodProxy proxy) throws Throwable { System.out.println("打印前"); Object result = proxy.invokeSuper(obj, arg2); System.out.println("打印后"); return result; } }
执行入口程序,打印结果:
打印前
printSomthing is now!!!
打印后
相关推荐
java常用设计模式及JDK与CGLIB实现动态代理区别(源码) /** * 使用cglib动态代理 * @author * */ public class BookFacadeProxy implements MethodInterceptor{ private Object target; @Override public...
分别使用jdk和cglib实现动态代理,包含UML图。还有相关的博客链接:http://blog.csdn.net/y_love_f/article/details/46345581.博客中有具体的代理解释
cglib实现动态代理依赖jar包,包括asm-5.1.jar和cglib-3.2.4.jar
NULL 博文链接:https://gz383.iteye.com/blog/591079
主要介绍了Spring如何基于Proxy及cglib实现动态代理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
JDK动态代理必须提供接口才能使用,在一些不能提供接口的环境中,只能采用其他第三方技术,比如CGLIB动态代理,这里提供CGLIB动态代理的相关jar包,供学习和测试使用。
简介Java编程的目标是实现现实不能完成的,优化现实能够完成的,是一种虚拟技术。生活中的方方面面都可以虚拟到代码中。代理模式所讲的就是现实生活中的这么一个概念:
cglib实现动态代理,有源代码,详细的实例,逐步分析,实现动态代理。
基于MAVEN项目的CGLib动态代理原理及实现
代理模式详解-jdk与cglib动态代理与底层实现,spring中常用的设计模式,本案例是从源码到代理模式的实现。
cglib实现动态代理所依赖的jar包 在学习spring中会用到
JDK和CGlib分别实现的动态代理源代码
AOP之JDK动态代理和CGLib动态代理 ,具体效果和过程看博文 http://blog.csdn.net/evankaka/article/details/45195383
JAVA动态代理实现Demo(JDK动态代理和CGLIB动态代理)
cglib通过继承方式实现代理,也就是基于类,在子类中采用方法拦截的技术拦截所有父类方法的调用并顺势织入横切逻辑。 我们最终是通过一个代理对象去调用方法的,那我们就要获取一个代理对象,cglib代理,是通过...
一个用CGlib实现Java动态代理的简单、完整的好例子!
代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。 按照代理的创建时期,代理类可以...
jdk动态代理--适合企业级开发,但是它要求必须面向接口编程,假如目标类没有实现接口,则没办法代理这个类。 cglib代理, 1.cglib(Code Generation Library)是一个强大的,高性能,高质量的Code生成类库。它可以在...
NULL 博文链接:https://huihai.iteye.com/blog/858524
Cglib动态代理技术对目标对象有没有实现接口,没有要求. Cglib动态代理技术,是通过拷贝然后修改目标对象的类的字节码来产生一个代理对象 而且这个Cglib产生的代理对象实例 是 目标对象的一个子类.