代理-Cglib

原创 2016年12月19日 10:55:39

代理是用来做什么的?

一段代码:

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();
    }

}

图示

这里写图片描述

cglib动态代理jar包

  • 2017年11月29日 09:52
  • 363KB
  • 下载

cglib(动态代理)

  • 2017年11月02日 13:10
  • 540KB
  • 下载

jdk/cglib动态代理学习笔记

jdk动态代理: 基于接口实现,因此若目标类没有实现接口,则这种方式失效,需使用cglib动态代理实现。 jdk动态代理使用步骤: 创建目标接口 创建目标类,实现目标接口 创建代理类,实现Invoca...

CGLib代理jar包

  • 2017年07月26日 16:18
  • 238KB
  • 下载

cglib实现动态代理依赖jar包

  • 2017年03月20日 17:22
  • 314KB
  • 下载

有接口的CGLIB动态代理实现

有接口的CGLIB动态代理实现定义接口package com.hk.service; /** * 定义一个接口(一类人要做的事情) * @author 浪丶荡 * */ public inte...

cglib生成的代理class

  • 2016年09月13日 23:25
  • 5KB
  • 下载

java动态代理(类加载、asm、cglib、javassist)

class文件简介及加载Java编译器编译好Java文件之后,产生.class 文件在磁盘中。这种class文件是二进制文件,内容是只有JVM虚拟机能够识别的机器码。JVM虚拟机读取字节码文件,取出二...

cglib aop spring 动态代理

  • 2014年08月16日 11:11
  • 965KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:代理-Cglib
举报原因:
原因补充:

(最多只允许输入30个字)