设计模式之代理模式------Cglib代理 简单运用

相比静态代理和动态代理,Cglib代理可谓是备受推崇,首先它不用向静态代理和动态代理那样实现接口,其次它更方便了为我们提供了拦截器的一些接口,是我们能够更好的对一些方法的控制。下面看代码吧。
第一种比较简单的例子,只是单纯的运用了Cglib代理。运用Cglib代理需要ASM包支持,Spring3.2.5核心包里面包含了asm包这里给出MAVEN的依赖

   <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>3.2.5.RELEASE</version>
        </dependency>

需要被代理的类,名字起的不太好。

public  class UserDao {
     public void doField(){
         System.out.println("开始学习Cglib代理------------------------");
     }
     public void eat(){
         System.out.println("吃吃吃吃吃-------------------");
     }
     public void pay(){
         System.out.println("买买买买买-------------------");
     }
}

代理的类,需要继承MethodIntercepeor,然后实现接口里为我们提供的唯一的一个方法intercept在这里我们可以通过Method.invoke()方法达到调用目标类,这里不用像jdk动态代理那样需要绑定接口,我们需要创建一个Enhancer用于创建代理类,首先要设置他的父类,个人理解,与动态代理需要绑定接口相比,Cglib代理应该是生成了一个子类用于代理,然后设置回调,对于回调函数的理解就是一个人在做某件事的时候,做到一半暂停了,然后等别人做完一件事,给出反馈,然后继续完成自己的这件事,设置回调必须实现了CallBack

public  class ProxyFactory implements MethodInterceptor {

  private Object object;

    public ProxyFactory(Object object) {
        this.object = object;
    }

    public Object getProxyInstance() {
        Enhancer en = new Enhancer();
        en.setSuperclass(object.getClass());
        en.setCallback(this);
        return en.create();
    }

    public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
        System.out.println("我开始工作了");
        Object returnValue = method.invoke(object, objects);
        System.out.println("我结束工作了");
        return returnValue;
    }
}

测试类:

public class Client {
    public static  void main(String args[]){
        UserDao proxy = (UserDao) new ProxyFactory(new UserDao()).getProxyInstance();
        proxy.doField();
    }
}

测试结果

我开始工作了
开始学习Cglib代理------------------------
我结束工作了

只是简单的运用了一下Cglib代理,下面总结一下Cglib在拦截器上的运用

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值