<!--StartFragment-->AOP 使用的设计模式就是代理模式,是对IOC设计的补充。为了扩展性,往往会加上反射,动态生成字节码,生成代理类。
这里往往还会使用到DI,把代理的实现类通过依赖注入的方式,传给代理工厂。
关于生成动态代理类的方式有两种:JDK和CGLIB。
CGLIB,是一个开源工具。spring 和hibernate已经广泛使用。
关于AOP的概念解释网上有很多。
附件的内容是关于JDK和CGLIB动态生成代理工厂的实例。
JDK动态代理和CGLIB字节码生成的区别?
JDK动态代理只能对实现了接口的类生成代理,而不能针对类
CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法
因为是继承,所以该类或方法最好不要声明成final
CGLIB:
- public Object createProxyObject(Object obj) {
- this.targetObject = obj;
- Enhancer enhancer = new Enhancer();
- enhancer.setSuperclass(obj.getClass());
- enhancer.setCallback(this);
- Object proxyObj = enhancer.create();
- return proxyObj;// 返回代理对象,返回的对象其实就是一个封装了“实现类”的代理类,是实现类的实例。
- }
JDK:
- public Object newProxy(Object targetObject) {// 将目标对象传入进行代理
- this.targetObject = targetObject;
- return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),
- targetObject.getClass().getInterfaces(), this);// 返回代理对象
- }
<!--EndFragment-->
看上面的代码。在动太生成代理类时,传递的是实现类所所实现的接口argetObject.getClass().getInterfaces()。JDK只能对于接口进行做代理。如果换成类的话,则会抛java.lang.ClassCastException异常。
相关推荐
NULL 博文链接:https://jummy.iteye.com/blog/255628
java代理机制 JDK动态代理和cglib代理 详解
AOP之JDK动态代理和CGLib动态代理 ,具体效果和过程看博文 http://blog.csdn.net/evankaka/article/details/45195383
java静态代理 jdk动态代理 cglib动态代理 代理原理
jdk 和 cglib的简单动态代理,闲来无事 写写。有需要的朋友可以看看
Spring框架的AOP中重要的一个知识点,动态代理,springAOP框架会根绝实际情况选择使用jdk的动态代理还是cglib的动态代理
jdk 的动态代理和CGLIB代理
实现java动态代理的两个实例,jdk动态代理和cglib
JAVA动态代理实现Demo(JDK动态代理和CGLIB动态代理)
静态代理、jdk动态代理、cglib动态代理
JDK动态代理和Cglib动态代理实例源码
Java 动态代理详解(代理模式+静态代理+JDK动态代理+CGLIB动态代理)
该资源里面有Jdk动态代理,cglib动态代理,反射和拦截器(链)示例,里面也有所需要的jar包,下载下来导入eclipse即可运行,有问题请问我
jdk动态代理与cglib动态度代理的区别原理代码jar包
NULL 博文链接:https://lizhao6210-126-com.iteye.com/blog/1711218
JAVA JDK静态代理、动态代理、CGlib代理的代码演示 为对象增加功能
JDK代理和Cglib代理,下载源码清楚了解二者区别
动态代理的代码例子 里面敲好了注释 搭配文章观看更好
附件为java 动态代理实例,有全码,包括测试代码。 代码少,注释全。 对理解代理非常不错。
jdk和cglib动态代理的例子{jar包+源码} 解压:如有问题 用快压