代理-Cglib

代理是用来做什么的?

一段代码:

public class CglibTest{
    public static void main(String[] args) {
        //normal
        System.out.println("//normal test...");
        MyInterface mf = new MyInterfaceImpl();
        String ret = mf.method3("param method3");
        System.out.println(ret);
        //with proxy
        System.out.println("//with proxy test...");
        MyInterface mfWithProxy = CglibProxy.newProxyInstance(MyInterfaceImpl.class);
        String retWithProxy = mfWithProxy.method3("param method3");
        System.out.println(retWithProxy);
    }
};
输出:
//normal test...
param method3
//with proxy test...
before:invoke...
after:invoke...
param method3

代理是用来做这的

MyInterface.method3(String param)很简单,只是把传入的参数返回。
用代理其实和拦截器的道理一样,就是在方法前后执行其他的代码。这里输出before..,after…

怎么实现的呢?

class CglibProxy implements MethodInterceptor {//(2)要实现MethodInterceptor 

    @Override//实现过程
    public Object intercept(Object obj, Method method, Object[] args,
            MethodProxy proxy) throws Throwable {
        Object ret = null;
        System.out.println("before:invoke...");
        ret = proxy.invokeSuper(obj, args);
        System.out.println("after:invoke...");
        return ret;
    }

    //(1)创建代理对象的方法
    public static MyInterface newProxyInstance(Class targetInstanceClazz){
        Enhancer enhancer = new Enhancer();
        enhancer.setSuperclass(targetInstanceClazz);
        enhancer.setCallback(new CglibProxy());
        return (MyInterface) enhancer.create();
    }

}

图示

这里写图片描述

阅读更多
文章标签: 代理
个人分类: java 设计模式
上一篇Spring依赖注入properties,Map,List
下一篇java ThreadLocal proplem
想对作者说点什么? 我来说一句

CGLib代理jar包

2017年07月26日 238KB 下载

一套匹配的cglib和asm的jar包。

2017年09月01日 588KB 下载

Cglib动态代理需要用到的jar包

2017年12月30日 312KB 下载

CGlib动态代理类所需的jar包

2017年11月05日 534KB 下载

Java动态代理CGlib Jar包

2017年12月08日 247KB 下载

动态代理cglib例子

2017年12月25日 15KB 下载

jdk 的动态代理CGLIB代理

2012年07月06日 65KB 下载

cglib生成的代理class

2016年09月13日 5KB 下载

没有更多推荐了,返回首页

关闭
关闭