2.CGLB动态代理

实现动态代理的一种方式,和JdK动态代理的区别就是不需要接口,有个非抽象类就够了(这个坑,需要在ssm配好的情况下才能学习测试,Java的基本包里没有)

//输出类

package test;

public class TestA  {

    public void a(){

         System.out.println("你好啊,啦啦啦");

    };

}

 

package test;

import java.lang.reflect.Method;

import org.springframework.cglib.proxy.Enhancer;

import  org.springframework.cglib.proxy.MethodInterceptor;

import org.springframework.cglib.proxy.MethodProxy;

public class CglobproxyExample implements  MethodInterceptor{

/*

* 生成Cglib代理的类

* @parameter cls 需要代理的类

* @ return Cglib类的代理对象

* */

    public Object getProxy(Class cls){

         //CGLIB enhancer 增强类对象

         Enhancer enhancer = new Enhancer();

         //设置增强类型

         enhancer.setSuperclass(cls);

         //定义代理逻辑对象为当前对象,要求实现MethodInterceptor方法、

         enhancer.setCallback(this);

         //生成返回代理对象

         return enhancer.create();

    }

     /*

     * @param proxy 代理对象

     * param method 当前调度方法

     * param args 当前方法参数

     * return 代理结果返回

     * @throws Throwable 异常

     * */

    

    @Override

    public Object intercept(Object arg0, Method  arg1, Object[] arg2, MethodProxy arg3) throws  Throwable {

          System.out.println("进入当前逻辑方法");

         System.out.println("在调度真实对象之前的服务");

        Object result = arg3.invokeSuper(arg0,  arg2); 

         System.out.println("在调度对象之后的服务");

         

         return result;

    }

    

}

//测试类

package test;

public class TestProxy {

    public static void main(String[] args) {

         CglobproxyExample cbe = new  CglobproxyExample();

         TestA t = (TestA)  cbe.getProxy(TestA.class);

         t.a();

    }

}

大概和JdK的代理是相似的

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值