• Cglib动态代理


    Cglib动态代理

    在开始之前需要导入包asm-2.2.3.jar 和 cglib-nodep.2.1_3jar
    在这里可以免费下载http://download.csdn.net/detail/jarremdon/9624537
    CGLIB是一个强大的高性能的代码生成包。他弥补了JDK动态代理的缺点就,没有接口也可以使用代理
    那就是Cglib动态代理,但是自己有一个局限性,代理的类是可以继承的不能是final类,回顾代理模式
    通常是通过接口或者子类继承父类的方式来实现一类加强另一个类

    下面以具体的代码为例:

    service类
    package com.tang.CglibProxy;
    public class service {
    	public String services(){
    		return "My name is JarremDon";
    	}
    }
    
    代理类:CglibProxy
    package com.tang.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 {
    	//需要代理的原始类
    	public Object object;
    	public CglibProxy(Object object){
    		this.object=object;
    	}
    	public Object Proxy(){
    		//创建加强器
    		Enhancer enhancer=new Enhancer();
    		//设置需要加强的类
    		enhancer.setSuperclass(object.getClass());
    		//设置回调
    		enhancer.setCallback(this);
    		enhancer.setClassLoader(object.getClass().getClassLoader());
    		return enhancer.create();
    	}
    	@Override
    	public Object intercept(Object arg0, Method arg1, Object[] arg2,
    			MethodProxy arg3) throws Throwable {
    		//这里实现加强
    		 Object invoke=arg3.invoke(object, arg2);
    		return invoke.toString().toUpperCase();
    	}
    }


    测试类:MyTest

    package com.tang.CglibProxy;
    public class MyTest {
    	public 	static  void main(String args[]){
    		service s=new service();
    		CglibProxy proxy=new CglibProxy(s);
    		service s1=(service) proxy.Proxy();
    		System.out.println(s1.services());
    	}
    }


    CGLib创建的动态代理对象性能比JDK创建的动态代理对象的性能高不少,
     但是CGLib在创建代理对象时所花费的时间却比JDK多得多,所以对于单例的对象,
     因为无需频繁创建对象,用CGLib合适,反之,使用JDK方式要更为合适一些。同时,
     由于CGLib由于是采用动态创建子类的方法,对于final方法,无法进行代理
  • 相关阅读:
    借贷宝什么鬼 砸钱推广是妙招还是险棋
    div+css 怎么让一个小div在另一个大div里面 垂直居中
    php重新整理数组索引
    JS 得细心的坑位
    chrome表单自动填充导致input文本框背景变成偏黄色问题解决
    phpstorm配置xdebug
    MySQLi基于面向对象的编程
    PHP中开启gzip压缩的2种方法
    SVN创建主干,分支、合并分支
    懒加载和预加载【转载】
  • 原文地址:https://www.cnblogs.com/jarrem/p/5910826.html
Copyright © 2020-2023  润新知