【深入JAVA】cglib动态代理
来源:互联网 发布:游族网络招聘 编辑:程序博客网 时间:2024/05/04 18:38
下面来看一个DEMO,应该能够直接的看到效果
1>委托类,没有实现接口
package com.wuxiao.proxy.cglib;/** * 委托类 * @author xwu * */public class CountImpl {public void queryCount() {System.out.println("调用查看账户方法...");}}2>cglib代理类
package com.wuxiao.proxy.cglib;import java.lang.reflect.Method;import net.sf.cglib.proxy.Enhancer;import net.sf.cglib.proxy.MethodInterceptor;import net.sf.cglib.proxy.MethodProxy;/** * cglib动态代理 * * @author xwu * */public class CountImplCglib implements MethodInterceptor {private Object target;public Object getInstance(Object target) {this.target = target;Enhancer enhancer = new Enhancer();// 设置父类enhancer.setSuperclass(this.target.getClass());// 回调方法enhancer.setCallback(this);// 创建代理对象return enhancer.create();}public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {System.out.println("事务开始");proxy.invokeSuper(obj, args);System.out.println("事务结束");return null;}}3>编写测试类
package com.wuxiao.proxy.cglib;/** * cglib测试类 * * @author xwu * */public class CglibTest {public static void main(String[] args) {CountImplCglib countImplCglib = new CountImplCglib();CountImpl countImpl = (CountImpl) countImplCglib.getInstance(new CountImpl());countImpl.queryCount();}}4>看看运行效果
事务开始调用查看账户方法...事务结束
总结:JDK的动态代理机制只能代理实现了接口的类,而不能实现接口的类就不能实现JDK的动态代理,cglib是针对类来实现代理的,他的原理是对指定的目标类生成一个子类,并覆盖其中方法实现增强,但因为采用的是继承,所以不能对final修饰的类进行代理。
------------------------------
end by wuxiao
0 0
- 【深入JAVA】cglib动态代理
- Cglib动态代理深入
- 【Java】CGlib动态代理
- Java-CGLib动态代理
- CGLib动态代理 java
- Java动态代理--cglib代理
- java中的反射三(反射机制深入---静态代理,动态代理及cglib动态代理)
- java动态代理 JDK、Cglib动态代理
- java动态代理和cglib动态代理
- Java动态代理、cglib动态代理
- java动态代理和cglib动态代理
- Java动态代理和cglib动态代理
- Java动态代理、cglib动态代理
- java动态代理proxy ,cglib
- Java 动态代理(JDK&CGLib)
- java cglib动态代理 实例
- java动态代理和cglib
- Java动态代理之CGLIB
- Spring加载resource时classpath*:与classpath:的区别
- 《编程珠玑》阅读小记(6) — 算法设计技术
- luci学习与开发--安装
- HttpClient详解与实例介绍(post方式与get方式)
- Linux学习笔记(06-11)POSIX信号量
- 【深入JAVA】cglib动态代理
- anadroid环境搭建
- Mybatis学习(十二)mybatis理解动态sql及sql片段
- mysql命令行的一些小技巧【实用:多屏显示,格式化输出等】
- 剑指offer之替换空格
- CSS3选择器(下)
- sql查询最新记录
- setTiemout(fn,0) 用法。
- dojo面向对象的调用