CGLIB动态代理
来源:互联网 发布:六壬排盘软件 编辑:程序博客网 时间:2024/06/06 01:49
/** * 普通类 未实现接口的类 如果实现了接口的类默认使用JDK动态代理 * @author zzcy * */public class Cat { public void add(){ System.out.println("我养了一只猫。"); }}/** * CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法 * 因为是继承,所以该类或方法最好不要声明成final * @author zzcy * */public class CGLibProxy implements MethodInterceptor{ //需要代理的真实对象 private Object targetObject; //创建代理对象 public Object createProxyObject(Object obj) { this.targetObject = obj; //创建加强器,用来创建动态代理类 Enhancer enhancer = new Enhancer(); //为加强器指定要代理的业务类(即:为下面生成的代理类指定父类) enhancer.setSuperclass(this.targetObject.getClass()); //设置回调:对于代理类上所有方法的调用,都会调用CallBack,而Callback则需要 //实现intercept()方法进行拦截 enhancer.setCallback(this); // 创建动态代理类对象并返回 Object proxyObj = enhancer.create(); return proxyObj; } public void beforeM(){ System.out.println("预处理···"); } public void afterM(){ System.out.println("处理后···"); } //回调方法 @Override public Object intercept(Object object, Method method, Object[] arg, MethodProxy methodProxy) throws Throwable { beforeM(); //调用业务类(父类中)的方法 Object result = methodProxy.invokeSuper(object, arg); //System.out.println(method.getName()); //System.out.println(methodProxy.getSuperName()); afterM(); return result; } public static void main(String[] args) { Cat cat = new Cat(); CGLibProxy cgLibProxy = new CGLibProxy(); Cat catProxy = (Cat) cgLibProxy.createProxyObject(cat); catProxy.add(); } /*JDK动态代理和CGLIB字节码生成的区别 (1)JDK动态代理只能对实现了接口的类生成代理,而不能针对类 JDK动态代理所用到的代理类在程序调用到代理类对象时才由JVM真正创建,JVM根据传进来的 业务实现类对象以及方法名 ,动态地创建了一个代理类的class文件并被字节码引擎执行, 然后通过该代理类对象进行方法调用。 (2)CGLIB是针对类实现代理,主要是对指定的业务类生成一个子类,并覆盖其中业务方法实现代理 因为采用的是继承,所以不能对final修饰的类进行代理*/ // 这里需要注意的是实现MethodIntercetor接口,必须导入cglib-nodep-x.x_x.jar这个包。 // CGLib是针对类来实现代理的,他的原理是对指定的目标生成一个子类,并覆盖其中方法实现增强, // 但因为采用的是继承,所以不能对final修饰的类进行代理。 //如何强制使用CGLIB实现AOP? //(1)添加CGLIB库,SPRING_HOME/cglib/*.jar //(2)在spring配置文件中加入<aop:aspectj-autoproxy proxy-target-class="true"/>}
JDK动态代理文章请点击:
http://blog.csdn.net/renli2549/article/details/78490508
阅读全文
0 0
- 动态代理-CGLib动态代理
- 初识CGLIB动态代理
- Cglib 动态代理
- CGLib 动态代理
- 动态代理-->cglib
- cglib动态代理介绍
- cglib动态代理
- CGLIB 动态代理。
- CGLIB动态代理
- CGLIB实现动态代理
- cglib 动态代理
- cglib动态代理模式
- cglib动态代理
- cglib动态代理
- CGLIB 动态代理
- cglib动态代理
- 动态代理CGLIB
- CGLIB动态代理应用
- 正则表达式_小记
- Oracle修改字段类型方法总结
- [WARNING] 'dependencies.dependency.(groupId:artifactId:type:classifier)' must be unique
- javax.net.ssl.SSLException: Read error: ssl=0xdeae5100: I/O error during system call, Connection res
- 说说网站限时秒杀系统的架构设计
- CGLIB动态代理
- 关于Qt 静态成员函数调用信号
- 继承与多态
- 2017.11.03
- 《数字图像处理的MATLAB实现》读书报告
- 使用Java程序输出1~100之间 7的倍数的个数及总和,并打印输出
- HashMap底层实现原理
- PHP Notice: Undefined variable: _SESSION
- 自定义控件---save和saveLayler中参数的意义