Java代理模式(cglib代理)
来源:互联网 发布:java 精确毫秒后6位 编辑:程序博客网 时间:2024/06/08 01:41
java提供的基于Proxy、InvocationHandler的动态代理由于只能创建接口的代理对象,在实际应用中不能很好的满足需要,针对这个问题,另外一个开源框架cglib提供了一种实现方式,可以针对类进行代理对象的创建。
CGLib采用了非常底层的字节码技术,其原理是通过字节码技术为一个类创建子类,并在子类中采用方法拦截的技术拦截所有父类方法的调用,顺势织入横切逻辑。JDK动态代理与CGLib动态代理均是实现Spring AOP的基础。
其中Hibernate懒加载使用的代理方式就是Cglib动态代理
实例如下:
1、原始对象:
public class Operate {public void delete(){System.out.println("删除操作");}}
2、代理实现:
public class CglibProxy implements MethodInterceptor{private Enhancer enhancer = new Enhancer();/** * 生成代理子类 * @param clazz * @return */@SuppressWarnings("rawtypes")public Object getProxy(Class clazz){enhancer.setSuperclass(clazz);enhancer.setCallback(this);return enhancer.create();}/** * 拦截方法 * object 代理对象实例 * method 原始对象的方法名 * arg2 传递给方法的实际入参 * proxy 与源对象中的method相对应的代理对象中的方法 */@Overridepublic Object intercept(Object object, Method method, Object[] arg2, MethodProxy proxy) throws Throwable {// TODO Auto-generated method stubSystem.out.println("前置操作");Object result = proxy.invokeSuper(object, arg2);System.out.println("后置操作");return result;}}
3、客户端实现:
public class Client {public static void main(String []args){CglibProxy cglibProxy = new CglibProxy();Operate operate = (Operate)cglibProxy.getProxy(Operate.class);operate.delete();}}
运行结果:
前置操作删除操作后置操作
以上可以看出cglib代理可以实现没有接口类的proxy代理
0 0
- Java代理模式(cglib代理)
- Java代理模式 静态代理,动态代理,Cglib代理
- java代理模式、动态代理(JDK,CGLIB)
- java 代理模式 CGLIB的动态代理
- Java实现代理模式(CGLIB)
- 代理模式三(cglib动态代理)
- Java代理模式(静态代理、Cglib动态代理)
- Java 动态代理 (CGLIB代理)
- java代理(三)--cglib动态代理
- 代理模式-cglib动态代理
- java代理模式(JDK和cglib以及Spring AOP)
- java动态代理模式(jdk和cglib)
- Java代理模式及应用(三)Cglib实现
- cglib动态代理模式
- cglib动态代理模式
- 代理模式之Cglib
- 什么是CGLIB代理模式
- 代理模式CGLIB
- C++11
- 微信小程序完整开发,看这篇文章就够了
- python2-3.26
- asp.net使用ado连接数据库
- 1013. 数素数 (20)
- Java代理模式(cglib代理)
- 判断页面是否滚动到底部
- 比较offsetX, pageX,clientX,screenX的区别
- ASP横向输出和纵向输出PDF
- 扩展欧几里德算法 递归和非递归实现及证明
- Arduino教程汇总贴
- Java实现字符串大小写的转换并倒序输出
- 互联网广告系统综述一生态圈
- 前端面试题小探(1)